我遇到了多个具有相同路径的类(即同名,相同的包!!!)。
出于某种原因,gwt-dev附带了自己的org.apache.xerces.jaxp.DocumentBuilderFactoryImpl
和javax.xml.parsers.DocumentBuilderFactory
版本。
与此同时,春天也取决于这些类别,但来自不同的罐子。我不知道应该是什么,但看起来像xalan
& xml-api
是spring依赖的两个依赖项(这些依赖项是可选的)
有趣的是,eclipse可以运行相同的代码(它是一个单元测试)而没有问题,但是确定无法。所以我想这个问题是由于每个跑步者考虑每个罐子的优先级的方式。
现在回答这个问题:如何设置我的POM,以便我可以确定当我的应用程序内部运行任何代码时,jar中的类将从其他jar中选择?
感谢。
答案 0 :(得分:14)
现在回答这个问题:如何设置我的POM,以便我可以确定当我的应用程序内部运行任何代码时,jar中的类将从其他jar中选择?
从Maven 2.0.9开始,Maven使用POM中依赖项的顺序来构建类路径,以便可以操作它。只需先声明“正确”的jar,你的应用就会从中挑选出来。
来自maven 2.0.9的发行说明:
MNG-1412 / MNG-3111在类路径上引入了依赖关系的确定性排序。在过去,使用自然集排序,这导致奇怪的结果。现在可以从您的pom中保留排序,并通过最后添加的继承添加依赖项。在具有冲突或重复依赖性的构建中,这可能会引入对输出的更改。简而言之,如果您遇到奇怪的2.0.9问题,请查看依赖关系,看看您是否在某处发生冲突。
答案 1 :(得分:0)
maven项目中的依赖关系可能是一个麻烦的故障排除。我通常做的是......
希望这有帮助!
答案 2 :(得分:0)
要知道哪个jar导致问题:使用-X标志运行Maven。
设置POM以排除相关的jar:
<yourproject.deployment.excludes>
artifactId1,artifactId2,...
</yourproject.deployment.excludes>
...
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${your.lib.for.example}</outputDirectory>
<overWriteSnapshots>true</overWriteSnapshots>
<overWriteIfNewer>true</overWriteIfNewer>
<excludeTransitive>false</excludeTransitive>
<excludeArtifactIds>${yourproject.deployment.excludes}</excludeArtifactIds>
<includeScope>compile</includeScope>
</configuration>
</execution>
</executions>
</plugin>