jar文件在maven中冲突

时间:2017-12-13 11:36:51

标签: java maven jar urlclassloader

现在我正在使用 maven项目。这个项目使用了一些logging.1.jar。我们将在此项目中添加一项新功能,该功能取决于logging.3.jar

编译很好,但由于jar文件冲突,应用程序在运行时失败。

原因是新添加的功能,它使用logging.1.jar代替logging.3.jar

我无法初始化存在的类是新添加的功能,因为它依赖于logging.3.jar。怎么解决?

是否可以使用URLClassLoader来解决?

2 个答案:

答案 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>

然而,后一种解决方案可能并不适合所有情况,我个人更喜欢第一种解决方案,因为它不会混淆真正的目的(因此排除),并且不会在以后引起意外。