Maven类path顺序问题

有没有人知道在Maven2中设置特定的类path顺序的方法,而不是我现在看到的随机sorting?

有许多合法的理由想要这样做:

  • 一个供应商提供了一个补丁jar包,其中包含一个以前发布的jar的重载类,因此补丁jar必须首先出现在classpath命令中。
  • 通过遍历pom依赖关系发现的classpath上find的两个jar在同一个包中包含相同的类,并具有不同的签名。 例如:

jboss jbossall-client 4.2.0.GA

org.hibernate hibernate 3.1

两者都包含:org.hibernate.util.ReflectHelper.class,但是jbossall-client版本缺lessgetFastClass方法。

从Google的search中我发现这也许是Maven爱好者和面临这个特定问题的人之间争论的焦点,但是阶级pathsorting当然有合理的理由。

任何人已经解决了这个特殊的困境,将不胜感激!

谢谢

从版本2.0.9开始,maven使用pom命令来处理classpath,所以现在可以实际操作它。 我们主要将传递依赖关系压缩到我们也直接包含的外部库。

从maven 2.0.9的发行说明:

MNG-1412 / MNG-3111引入了类path上依赖关系的确定性sorting。 过去,使用自然sorting,这导致奇怪的结果。 这个顺序现在保存在您的pom文件中,最后添加了由inheritance添加的依赖项。 在具有冲突或重复依赖性的构build中,这可能会对输出进行更改。 简而言之,如果你对2.0.9有一些奇怪的问题,那么看一看依赖关系,看看你是否有冲突。

Maven 2.0.9增加了正确的顺序,所以你绝对必须有这个版本或更高的下面的工作。

其次,你需要一个更新的插件。 Maven家伙正在修复,在他们的jira修复,但这是我迫切需要的东西。 所以在此期间,我已经修复了这个问题,你可以从Github中获取Modified插件源代码 。

编辑:请参阅http://jira.codehaus.org/browse/MECLIPSE-388

有两种方法来安装它,拉我的修改后的代码,并安装它,或者下载预制的jar,并添加它。

构build插件

从检出的插件目录运行maven install ,然后在项目pom的插件部分添加以下内容:

 <build> </plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-eclipse-plugin</artifactId> <version>2.8-cpfix</version> </plugin> </plugins> </build> 

下载jar

另外,如果你不想下载和编译你自己,那么你可以只抓住jar文件并自己安装。

一旦你有文件运行

 mvn install:install-file -Dfile=<path-to-file> -DgroupId=org.apache.maven.plugins \ -DartifactId=maven-eclipse-plugin -Dversion=2.8-cpfix -Dpackaging=jar 

不pipe你现在在运行mvn eclipse:eclipse时候如何安装它,它都会select修改过的代码,并根据你在你的pom文件中定义的顺序来sorting依赖关系,没有按字母sorting。 它也将把JRE容器放在依赖关系的顶部。

希望这个代码的真正版本很快就会出来,但同时这个修复已经在我的项目上为我工作,我希望它也能帮助其他人。