现在我正在使用 maven项目。这个项目使用了一些logging.1.jar
。我们将在此项目中添加一项新功能,该功能取决于logging.3.jar
。
编译很好,但由于jar文件冲突,应用程序在运行时失败。
原因是新添加的功能,它使用logging.1.jar
代替logging.3.jar
我无法初始化存在的类是新添加的功能,因为它依赖于logging.3.jar
。怎么解决?
是否可以使用URLClassLoader
来解决?
答案 0 :(得分:0)
将适当的jar依赖项添加到pom.xml中并运行mvn clean-install -U命令。此命令可以清除您的差异并正确更新。
答案 1 :(得分:0)
请参阅Maven introduction上的依赖关系排除部分。
所以你应该在你的pom中使用这样的东西:
<dependencies>
...
<dependency>
<groupId>org.examle</groupId>
<artifactId>including-jar</artifactId>
<version>1.0.0</version>
<exclusions>
<exclusion> <!-- declare the exclusion here -->
<groupId>org.logging</groupId>
<artifactId>logging</artifactId> (or logging1)
</exclusion>
</exclusions>
</dependency>
...
</dependencies>
棘手的部分是你必须找到依赖于旧版本的工件(包括-jar(s))并将这个排除添加到所有这些工件中。
另一方面,也可以通过设置其提供的范围来防止这个较旧的工件实际加载,如:
<dependencies>
...
<dependency>
<groupId>org.examle</groupId>
<artifactId>logging</artifactId> // or logging1
<version>1.0.0</version>
<scope>provided</scope>
</dependency>
...
</dependencies>
然而,后一种解决方案可能并不适合所有情况,我个人更喜欢第一种解决方案,因为它不会混淆真正的目的(因此排除),并且不会在以后引起意外。