1

我准备了一些实用类。我计划将它们制作为 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 上而不是其他依赖项上。

4

2 回答 2

0

您的代码取决于所有其他 jar。当您为项目创建 jar 时,jar 文件不包含所有依赖的 jar 类。

无论你在哪里使用你的 jar,你都必须使用其他依赖的 jar。你还没有提到你是否也在使用 Maven。如果是,那么如果您定义了依赖项,那么所有依赖的 jar 都将位于类路径中。

于 2013-04-23T04:40:31.047 回答
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

那么一切都应该没问题。

于 2013-04-25T19:20:29.587 回答