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

Subartifact (ejb-client, test-jar etc.) are not reselved as active project artifacts in build phases prior to package

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • 2.0.4, 2.0.5
    • 3.0-alpha-1
    • Dependencies
    • None
    • Not platform dependent
    • Patch

    Description

      I have prepared simple project to show the bug.
      It contains three artifacts:

      -root
      --- ejb3
      --- client

      Client depends on ejb3 with <type>ejb-client</type>.

      The local and remote repository must not contain those artifacts.
      When I do "mvn -X compile" (or even integration-tests) on root project I will
      get those errors:

      ...
      [DEBUG] Configuring mojo 'org.apache.maven.plugins:maven-resources-plugin:2.2:resources' -->
      [DEBUG] (f) filters = []
      [DEBUG] (f) outputDirectory = /home/ptab/m2/bug/root/client/target/classes
      [DEBUG] (f) project = org.apache.maven.project.MavenProject@f6a17377
      [DEBUG] (f) resources = [org.apache.maven.model.Resource@4f34b07e]
      [DEBUG] – end configuration –
      [INFO] [resources:resources]
      [INFO] Using default encoding to copy filtered resources.
      [DEBUG] pl.waw.tabor:client:jar:1.0-SNAPSHOT (selected for null)
      [DEBUG] junit:junit:jar:3.8.1:test (selected for test)
      [DEBUG] pl.waw.tabor:ejb3:ejb-client:client:1.0-SNAPSHOT:compile (selected for compile)
      [DEBUG] Skipping disabled repository Newitech-repository
      [DEBUG] Skipping disabled repository central
      [DEBUG] ejb3: using locally installed snapshot
      [DEBUG] Trying repository Newitech-snapshots-repository
      Downloading: scp://ivy.newitech.com/opt/maven/public_html/repozytoria/newitech-snapshots/pl/waw/tabor/ejb3/1.0-SNAPSHOT/ejb3-1.0-SNAPSHOT-client.jar
      [WARNING] Unable to get resource 'pl.waw.tabor:ejb3:ejb-client:client:1.0-SNAPSHOT' from repository Newitech-snapshots-repository (scp://ivy.newitech.com/opt/maven/public_html/repozytoria/newitech-snapshots)
      [DEBUG] Skipping disabled repository Newitech-repository
      [DEBUG] Trying repository Newitech-publiczne
      Downloading: scp://ivy.newitech.com/opt/maven/public_html/repozytoria/publiczne//pl/waw/tabor/ejb3/1.0-SNAPSHOT/ejb3-1.0-SNAPSHOT-client.jar
      [WARNING] Unable to get resource 'pl.waw.tabor:ejb3:ejb-client:client:1.0-SNAPSHOT' from repository Newitech-publiczne (scp://ivy.newitech.com/opt/maven/public_html/repozytoria/publiczne/)
      [DEBUG] Trying repository Maven Snapshots
      Downloading: http://people.apache.org/maven-snapshot-repository/pl/waw/tabor/ejb3/1.0-SNAPSHOT/ejb3-1.0-SNAPSHOT-client.jar
      [WARNING] Unable to get resource 'pl.waw.tabor:ejb3:ejb-client:client:1.0-SNAPSHOT' from repository Maven Snapshots (http://people.apache.org/maven-snapshot-repository)
      [DEBUG] Trying repository codehausSnapshots
      Downloading: http://snapshots.maven.codehaus.org/maven2/pl/waw/tabor/ejb3/1.0-SNAPSHOT/ejb3-1.0-SNAPSHOT-client.jar
      [WARNING] Unable to get resource 'pl.waw.tabor:ejb3:ejb-client:client:1.0-SNAPSHOT' from repository codehausSnapshots (http://snapshots.maven.codehaus.org/maven2)
      [DEBUG] Skipping disabled repository central
      [DEBUG] Unable to download the artifact from any repository

      Try downloading the file manually from the project website.

      Then, install it using the command:
      mvn install:install-file -DgroupId=pl.waw.tabor -DartifactId=ejb3 \
      -Dversion=1.0-SNAPSHOT -Dpackaging=ejb-client -Dfile=/path/to/file

      Path to dependency:
      1) pl.waw.tabor:client:jar:1.0-SNAPSHOT
      2) pl.waw.tabor:ejb3:ejb-client:client:1.0-SNAPSHOT

      pl.waw.tabor:ejb3:ejb-client:1.0-SNAPSHOT

      from the specified remote repositories:
      Maven Snapshots (http://people.apache.org/maven-snapshot-repository),
      central (http://repo1.maven.org/maven2),
      codehausSnapshots (http://snapshots.maven.codehaus.org/maven2),
      Newitech-snapshots-repository (scp://ivy.newitech.com/opt/maven/public_html/repozytoria/newitech-snapshots),
      Newitech-publiczne (scp://ivy.newitech.com/opt/maven/public_html/repozytoria/publiczne/),
      Newitech-repository (scp://ivy.newitech.com/opt/maven/public_html/repozytoria/newitech)

      [INFO] ------------------------------------------------------------------------
      [ERROR] BUILD ERROR
      [INFO] ------------------------------------------------------------------------
      [INFO] Failed to resolve artifact.

      Missing:
      ----------
      1) pl.waw.tabor:ejb3:ejb-client:client:1.0-SNAPSHOT

      Try downloading the file manually from the project website.

      Then, install it using the command:
      mvn install:install-file -DgroupId=pl.waw.tabor -DartifactId=ejb3 \
      -Dversion=1.0-SNAPSHOT -Dpackaging=ejb-client -Dfile=/path/to/file

      Path to dependency:
      1) pl.waw.tabor:client:jar:1.0-SNAPSHOT
      2) pl.waw.tabor:ejb3:ejb-client:client:1.0-SNAPSHOT

      ----------
      1 required artifact is missing.

      for artifact:
      pl.waw.tabor:client:jar:1.0-SNAPSHOT

      from the specified remote repositories:
      Maven Snapshots (http://people.apache.org/maven-snapshot-repository),
      central (http://repo1.maven.org/maven2),
      codehausSnapshots (http://snapshots.maven.codehaus.org/maven2),
      Newitech-snapshots-repository (scp://ivy.newitech.com/opt/maven/public_html/repozytoria/newitech-snapshots),
      Newitech-publiczne (scp://ivy.newitech.com/opt/maven/public_html/repozytoria/publiczne/),
      Newitech-repository (scp://ivy.newitech.com/opt/maven/public_html/repozytoria/newitech)

      [INFO] ------------------------------------------------------------------------
      [DEBUG] Trace
      org.apache.maven.lifecycle.LifecycleExecutionException: Missing:
      ----------
      1) pl.waw.tabor:ejb3:ejb-client:client:1.0-SNAPSHOT

      Try downloading the file manually from the project website.

      Then, install it using the command:
      mvn install:install-file -DgroupId=pl.waw.tabor -DartifactId=ejb3 \
      -Dversion=1.0-SNAPSHOT -Dpackaging=ejb-client -Dfile=/path/to/file

      Path to dependency:
      1) pl.waw.tabor:client:jar:1.0-SNAPSHOT
      2) pl.waw.tabor:ejb3:ejb-client:client:1.0-SNAPSHOT

      ----------
      1 required artifact is missing.

      for artifact:
      pl.waw.tabor:client:jar:1.0-SNAPSHOT

      from the specified remote repositories:
      Maven Snapshots (http://people.apache.org/maven-snapshot-repository),
      central (http://repo1.maven.org/maven2),
      codehausSnapshots (http://snapshots.maven.codehaus.org/maven2),
      Newitech-snapshots-repository (scp://ivy.newitech.com/opt/maven/public_html/repozytoria/newitech-snapshots),
      Newitech-publiczne (scp://ivy.newitech.com/opt/maven/public_html/repozytoria/publiczne/),
      Newitech-repository (scp://ivy.newitech.com/opt/maven/public_html/repozytoria/newitech)

      at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(DefaultLifecycleExecutor.java:556)
      at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalWithLifecycle(DefaultLifecycleExecutor.java:480)
      at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoal(DefaultLifecycleExecutor.java:459)
      at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalAndHandleFailures(DefaultLifecycleExecutor.java:311)
      at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeTaskSegments(DefaultLifecycleExecutor.java:278)
      at org.apache.maven.lifecycle.DefaultLifecycleExecutor.execute(DefaultLifecycleExecutor.java:143)
      at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:330)
      at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:123)
      at org.apache.maven.cli.MavenCli.main(MavenCli.java:272)
      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
      at java.lang.reflect.Method.invoke(Method.java:585)
      at org.codehaus.classworlds.Launcher.launchEnhanced(Launcher.java:315)
      at org.codehaus.classworlds.Launcher.launch(Launcher.java:255)
      at org.codehaus.classworlds.Launcher.mainWithExitCode(Launcher.java:430)
      at org.codehaus.classworlds.Launcher.main(Launcher.java:375)
      Caused by: org.apache.maven.artifact.resolver.MultipleArtifactsNotFoundException: Missing:
      ----------
      1) pl.waw.tabor:ejb3:ejb-client:client:1.0-SNAPSHOT

      Try downloading the file manually from the project website.

      Then, install it using the command:
      mvn install:install-file -DgroupId=pl.waw.tabor -DartifactId=ejb3 \
      -Dversion=1.0-SNAPSHOT -Dpackaging=ejb-client -Dfile=/path/to/file

      Path to dependency:
      1) pl.waw.tabor:client:jar:1.0-SNAPSHOT
      2) pl.waw.tabor:ejb3:ejb-client:client:1.0-SNAPSHOT

      ----------
      1 required artifact is missing.

      for artifact:
      pl.waw.tabor:client:jar:1.0-SNAPSHOT

      from the specified remote repositories:
      Maven Snapshots (http://people.apache.org/maven-snapshot-repository),
      central (http://repo1.maven.org/maven2),
      codehausSnapshots (http://snapshots.maven.codehaus.org/maven2),
      Newitech-snapshots-repository (scp://ivy.newitech.com/opt/maven/public_html/repozytoria/newitech-snapshots),
      Newitech-publiczne (scp://ivy.newitech.com/opt/maven/public_html/repozytoria/publiczne/),
      Newitech-repository (scp://ivy.newitech.com/opt/maven/public_html/repozytoria/newitech)

      at org.apache.maven.artifact.resolver.DefaultArtifactResolver.resolveTransitively(DefaultArtifactResolver.java:305)
      at org.apache.maven.artifact.resolver.DefaultArtifactResolver.resolveTransitively(DefaultArtifactResolver.java:272)
      at org.apache.maven.artifact.resolver.DefaultArtifactResolver.resolveTransitively(DefaultArtifactResolver.java:243)
      at org.apache.maven.plugin.DefaultPluginManager.resolveTransitiveDependencies(DefaultPluginManager.java:1142)
      at org.apache.maven.plugin.DefaultPluginManager.executeMojo(DefaultPluginManager.java:374)
      at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(DefaultLifecycleExecutor.java:539)
      ... 16 more
      [INFO] ------------------------------------------------------------------------
      [INFO] Total time: 8 seconds
      [INFO] Finished at: Mon Mar 12 20:34:44 CET 2007
      [INFO] Final Memory: 6M/15M
      [INFO] ------------------------------------------------------------------------
      ==================================================================================================

      I am sure, the most important line from this log is:
      [DEBUG] pl.waw.tabor:ejb3:ejb-client:client:1.0-SNAPSHOT:compile (selected for compile)

      I would like to see
      "[DEBUG] active project artifact:
      artifact = pl.waw.tabor:ejb3:ejb-client:client:1.0-SNAPSHOT:compile;
      project: org.apache.maven.project.MavenProject@e82f22ea (selected for compile)"
      instead.

      If I do "mvn install" -> The source will compile (because ejb3-client artifact will be found in local repository).

      I investigated the source, and found that the reason is in org.apache.maven.project.MavenProject class in
      replaceWithActiveArtifact (method):
      The line "if (( ref.getArtifact().getDependencyConflictId().equals( pluginArtifact.getDependencyConflictId() ))"
      fails because ref.getArtifact().getDependencyConflictId() is pl.waw.tabor:ejb3:ejb-client:client and
      pluginArtifact.getDependencyConflictId() is pl.waw.tabor:ejb3.

      It is my workaround. I know - it is very messy.
      If you helped me - where is the best place to correct it - i would prepare a proper
      patch.

      Index: components/maven-project/src/main/java/org/apache/maven/project/MavenProject.java
      ===================================================================
      — components/maven-project/src/main/java/org/apache/maven/project/MavenProject.java (wersja 517335)
      +++ components/maven-project/src/main/java/org/apache/maven/project/MavenProject.java (kopia robocza)
      @@ -1582,7 +1582,14 @@
      if ( ref != null && ref.getArtifact() != null )
      {
      // TODO: if not matching, we should get the correct artifact from that project (attached)

      • if ( ref.getArtifact().getDependencyConflictId().equals( pluginArtifact.getDependencyConflictId() ) )
        + if (( ref.getArtifact().getDependencyConflictId().equals( pluginArtifact.getDependencyConflictId() ))
        + || (
        + (ref.getArtifactId().equals(pluginArtifact.getArtifactId()))&&
        + (ref.getGroupId().equals(pluginArtifact.getGroupId()))&&
        + (ref.getArtifact().getType().equals("ejb"))&&
        + (pluginArtifact.getType().equals("ejb-client"))
        + )
        + )
        {
        // if the project artifact doesn't exist, don't use it. We haven't built that far.
        if ( ref.getArtifact().getFile() != null && ref.getArtifact().getFile().exists() )

      Attachments

        1. MavenProject.java
          52 kB
          Chris Wewerka
        2. MNG-2871-core-integration-testing-2.diff
          2 kB
          Piotr Tabor
        3. MNG-2871-core-integration-tests.diff
          16 kB
          Piotr Tabor
        4. MNG-2871-maven-project.diff
          1 kB
          Piotr Tabor
        5. MNG-2871-maven-project-2.1-SNAPSHOT.diff
          1 kB
          Piotr Tabor
        6. root.tar
          190 kB
          Piotr Tabor

        Issue Links

          Activity

            People

              jvanzyl Jason van Zyl
              ptabor Piotr Tabor
              Votes:
              5 Vote for this issue
              Watchers:
              9 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: