Uploaded image for project: 'Maven'
  1. Maven
  2. MNG-5868

Adding serval times the same artifact via MavenProjectHelper (attachArtifact) does not produce a failure

    Details

    • Type: Bug
    • Status: Reopened
    • Priority: Major
    • Resolution: Unresolved
    • Affects Version/s: 3.2.3
    • Fix Version/s: 3.5.x-candidate
    • Component/s: core
    • Labels:
      None

      Description

      During the check of an issue MSHADE-195 i stumbled over several things...

      If you take a look here and the log output excerpt:

      INFO] Minimized 2341 -> 1293
      [INFO] Minimized 3282 -> 2234
      [INFO] Replacing original artifact with shaded artifact.
      [INFO] Replacing /Users/kama/ws-git/apache/mshade/mshade-195/target/MSHADE-195-example-1-SNAPSHOT.jar with /Users/kama/ws-git/apache/mshade/mshade-195/target/MSHADE-195-example-1-SNAPSHOT-shaded.jar
      [INFO] Replacing original source artifact with shaded source artifact.
      [INFO] Replacing /Users/kama/ws-git/apache/mshade/mshade-195/target/MSHADE-195-example-1-SNAPSHOT-sources.jar with /Users/kama/ws-git/apache/mshade/mshade-195/target/MSHADE-195-example-1-SNAPSHOT-shaded-sources.jar
      [INFO] Dependency-reduced POM written at: /Users/kama/ws-git/apache/mshade/mshade-195/dependency-reduced-pom.xml
      [INFO]
      [INFO] --- maven-install-plugin:2.5.2:install (default-install) @ MSHADE-195-example ---
      [INFO] Installing /Users/kama/ws-git/apache/mshade/mshade-195/target/MSHADE-195-example-1-SNAPSHOT.jar to /Users/kama/.m2/repository/com/example/MSHADE-195-example/1-SNAPSHOT/MSHADE-195-example-1-SNAPSHOT.jar
      [INFO] Installing /Users/kama/ws-git/apache/mshade/mshade-195/dependency-reduced-pom.xml to /Users/kama/.m2/repository/com/example/MSHADE-195-example/1-SNAPSHOT/MSHADE-195-example-1-SNAPSHOT.pom
      [INFO] Installing /Users/kama/ws-git/apache/mshade/mshade-195/target/MSHADE-195-example-1-SNAPSHOT-sources.jar to /Users/kama/.m2/repository/com/example/MSHADE-195-example/1-SNAPSHOT/MSHADE-195-example-1-SNAPSHOT-sources.jar
      [INFO] Installing /Users/kama/ws-git/apache/mshade/mshade-195/target/MSHADE-195-example-1-SNAPSHOT-sources.jar to /Users/kama/.m2/repository/com/example/MSHADE-195-example/1-SNAPSHOT/MSHADE-195-example-1-SNAPSHOT-sources.jar
      [INFO] 
      

      Install plugin tries to install two identical artifacts which will work for maven-install-plugin but would fail a deploy to repository manager (for releases) etc.

      So after diving into the problem i found the following code in maven-core (MavenProject.java):

          /**
           * Add or replace an artifact. This method is now deprecated. Use the @{MavenProjectHelper} to attach artifacts to a
           * project. In spite of the 'throws' declaration on this API, this method has never thrown an exception since Maven
           * 3.0.x. Historically, it logged and ignored a second addition of the same g/a/v/c/t. Now it replaces the file for
           * the artifact, so that plugins (e.g. shade) can change the pathname of the file for a particular set of
           * coordinates.
           *
           * @param artifact the artifact to add or replace.
           * @throws DuplicateArtifactAttachmentException
           */
          public void addAttachedArtifact( Artifact artifact )
              throws DuplicateArtifactAttachmentException
          {
              getAttachedArtifacts().add( artifact );
          }
      
          public List<Artifact> getAttachedArtifacts()
          {
              if ( attachedArtifacts == null )
              {
                  attachedArtifacts = new ArrayList<>();
              }
              return attachedArtifacts;
          }
      

      So taking a look into MavenProjectHelper.java and the implementation (DefaultMavenProjectHelper.java).

          /**
           * Add an attached artifact or replace the file for an existing artifact.
           *
           * @see MavenProject#addAttachedArtifact(org.apache.maven.artifact.Artifact)
           * @param project project reference.
           * @param artifact artifact to add or replace.
           */
          public void attachArtifact( MavenProject project, Artifact artifact )
          {
              project.addAttachedArtifact( artifact );
          }
      

      which means that there is not check if an artifacts is already attached.

        Attachments

          Issue Links

            Activity

              People

              • Assignee:
                khmarbaise Karl Heinz Marbaise
                Reporter:
                khmarbaise Karl Heinz Marbaise
              • Votes:
                3 Vote for this issue
                Watchers:
                7 Start watching this issue

                Dates

                • Created:
                  Updated: