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容器放在依赖关系的顶部。
希望这个代码的真正版本很快就会出来,但同时这个修复已经在我的项目上为我工作,我希望它也能帮助其他人。