问题创建和使用自定义jar文件

时间:2013-04-22 20:32:26

标签: java maven jar dependencies

我准备了一些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而不是其他依赖。

2 个答案:

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

然后一切都会好起来的。