我准备了一些util类。 我计划将它们制作为jar并将其分发给所需的项目。
我的util类使用一些以jar文件形式提供的现有自定义代码。
我的代码依赖于“MainUtil.jar”,它依赖于Java Servlet,Commons IO,Commons Codec等......
我的POM依赖关系如下所示。
<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>
当我打包我的罐子时看起来很好。
但是当我的jar用于使用这些我的util类的项目时,我可以看到一个奇怪的问题。
打包时,commonc-codec jar文件不包含在项目包中。 此外,代码需要这个通用编解码器失败。
当我明确地包含commons-codec依赖时,一切都正常工作。
我的困惑是,为什么我应该在Maven根据自定义jar文件的POM解析时明确添加编解码器依赖项。 为什么问题只发生在commons-codec而不是其他依赖。
答案 0 :(得分:0)
您的代码取决于所有其他jar。为项目创建jar时,jar文件不包含所有依赖的jar类。
无论你在哪里使用你的罐子,你都必须使用其他依赖的罐子。你还没有提到你是否也在使用maven。如果是,那么如果您已经定义了依赖关系,那么所有相关的jar都将在类路径中。
答案 1 :(得分:0)
依赖解析的问题是,
项目中的现有依赖项可能会对此jar进行一些依赖项管理。这就是原因,旧jar优先于你的自定义jar依赖。 在你已经存在的jar中为这个常见的编解码器jar添加排除。
喜欢
<dependency>
<... Your existing dependency ..>
<exclusions>
<exclusion>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
</exclusion>
</exclusions>
</dependency>
使用此命令检查依赖关系的解析方式。
mvn dependency:resolve
然后一切都会好起来的。