Java 创建和使用自定义jar文件时出现问题
我已经准备了一些util类。 我计划将它们制作成jar,并将其分发到所需的项目中 我的util类使用一些已经存在的自定义代码,这些代码以jar文件的形式提供 我的代码依赖于“MainUtil.jar”,而“MainUtil.jar”在内部依赖于Javaservlet、Commons IO、Commons编解码器等等 我的POM依赖项如下所示Java 创建和使用自定义jar文件时出现问题,java,maven,jar,dependencies,Java,Maven,Jar,Dependencies,我已经准备了一些util类。 我计划将它们制作成jar,并将其分发到所需的项目中 我的util类使用一些已经存在的自定义代码,这些代码以jar文件的形式提供 我的代码依赖于“MainUtil.jar”,而“MainUtil.jar”在内部依赖于Javaservlet、Commons IO、Commons编解码器等等 我的POM依赖项如下所示 <dependency> <groupId>com.solutions</groupId> <ar
<dependency>
<groupId>com.solutions</groupId>
<artifactId>sol-core</artifactId>
<version>2.3</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-ws-security</artifactId>
<version>${cxf.version}</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-ws-policy</artifactId>
<version>${cxf.version}</version>
</dependency>
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk16</artifactId>
<version>1.46</version>
</dependency>
com.solutions
溶胶芯
2.3
org.apache.cxf
cxf rt ws-security
${cxf.version}
org.apache.cxf
cxf rt ws策略
${cxf.version}
org.bouncycastle
bcprov-jdk16
1.46
当我包装我的罐子时,它看起来很好
但是,当我的jar用于使用这些my util类的项目时,我会看到一个wierd问题
打包时,commonc编解码器jar文件不包含在项目包中。
另外,需要此通用编解码器的代码也失败了
当我明确地包含commons编解码器依赖项时,一切都正常工作
我的困惑是,既然Maven应该基于自定义jar文件的POM来解析我,为什么还要显式地添加编解码器依赖项呢。
以及为什么这个问题只发生在commons编解码器上,而不发生在其他依赖项上。您的代码依赖于所有其他JAR。为项目创建jar时,jar文件并不包含所有依赖的jar类
无论您在哪里使用jar,都必须使用其他依赖jar。您没有提到您是否也在使用maven。如果是,那么如果您定义了依赖关系,那么所有依赖JAR都将位于类路径中。解决依赖关系的问题是 项目中现有的依赖项可能对此jar进行了一些依赖项管理。这就是为什么旧jar优先于您的自定义jar依赖项。 请尝试在已有的jar中为这个通用编解码器jar添加排除 像
然后一切都会好起来。您可以展示一下您是如何定义对commons codec的依赖关系的吗?在您添加自定义jar的项目中,是否存在已经使用codec jar的依赖关系?是的。此项目中的一个现有依赖项已引用公共编解码器。这有什么影响吗?
<dependency>
<... Your existing dependency ..>
<exclusions>
<exclusion>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
</exclusion>
</exclusions>
</dependency>
mvn dependency:resolve