Uploaded image for project: 'Maven Eclipse Plugin (RETIRED)'
  1. Maven Eclipse Plugin (RETIRED)
  2. MECLIPSE-665

wrong classpath order generated in .classpath file for transitive dependencies

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Duplicate
    • 2.8
    • None
    • None
    • Patch

    Description

      Hi !

      It seems the generated ".classpath" file has a transitive dependencies order different from the one defined in the pom.xml.

      In ".classpath", the transitive dependencies are before the refering dependency, while in maven build, they are correctly after.

      This is particulary a problem with the "patch jars", containing a small fix for one class, which is supposed to be just before the original bugged jar in the classpath.

      I have attached a sample illustrating the problem (demo-classpath-order.zip).
      There is a client module (my-client), using a dependency (my-dependency), which has been patched (my-patched-dependency)
      my-client depends on my-patched-dependency which depends on my-dependency

      my-client is successfully build with maven (mvn clean install). The dependency tree is as follows :
      [INFO] ------------------------------------------------------------------------
      [INFO] [dependency:tree

      {execution: default-cli}

      ]
      [INFO] sample:my-client:jar:1.0-SNAPSHOT
      [INFO] - dependencies:my-patched-dependency:jar:1.0-SNAPSHOT:compile
      [INFO] - dependencies:my-dependency:jar:1.0-SNAPSHOT:compile
      [INFO] ------------------------------------------------------------------------

      But if you try to build under eclipse :
      1) mvn eclipse:eclipse to generate .classpath and .project

      • > clean under eclipse + build all
        ... There is an error "The method m2() is undefined for the type MyService"

      We can see the classpath in .classpath is inverted :
      <classpath>
      <classpathentry kind="src" path="src/main/java" including="*/.java"/>
      <classpathentry kind="output" path="target/classes"/>
      <classpathentry kind="var" path="M2_REPO/dependencies/my-dependency/1.0-SNAPSHOT/my-dependency-1.0-SNAPSHOT.jar"/>
      <classpathentry kind="var" path="M2_REPO/dependencies/my-patched-dependency/1.0-SNAPSHOT/my-patched-dependency-1.0-SNAPSHOT.jar"/>
      <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
      </classpath>
      my-dependency is before my-patched-dependency ! that's the reason why eclipse can not build it...

      I tried to fix the maven-eclipse-plugin, to reverse the order (cf. attached file maven-eclipse-plugin_patch_to_2.8.1.zip). It fixes the problem (but what about the side effect ?)

      Attachments

        1. maven-eclipse-plugin_patch_to_2.8.1.zip
          2.07 MB
          Bruno DOOLAEGHE
        2. demo-classpath-order.zip
          19 kB
          Bruno DOOLAEGHE

        Issue Links

          Activity

            People

              baerrach Barrie Treloar
              bruno.doolaeghe Bruno DOOLAEGHE
              Votes:
              1 Vote for this issue
              Watchers:
              4 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: