在实现的应用程序/模块中提供依赖项

时间:2020-03-17 08:52:30

标签: java maven

我正在编写一个库,希望将其编译为可实现的jar,然后将其用于其他项目/测试中。

在我的库中,我依赖于各种jar:okHttp,guava等。我要做的是告诉maven不要将这些依赖项放入最终的JAR中,而是要使依赖于此库的项目/模块提供这些依赖项依赖性

这如何在Maven中完成?

库pom.xml

    <groupId>com.example</groupId>
    <artifactId>testing-library</artifactId>
    <packaging>jar</packaging>
    <version>1.0.0-SNAPSHOT</version>
      <dependencies>
        <dependency>
        <groupId>com.google.guava</groupId>
        <artifactId>guava</artifactId>
        <version>28.2-jre</version>
        <scope>compile</scope>
      </dependency>
      <dependency>
        <groupId>com.squareup.okhttp3</groupId>
        <artifactId>okhttp</artifactId>
        <version>4.3.1</version>
        <scope>compile</scope>
      </dependency>
    </dependencies>

实现模块pom.xml

    <groupId>com.example</groupId>
    <artifactId>implementation-</artifactId>
    <version>1.0.0-SNAPSHOT</version>

      <dependencies>
        <dependency>
        <groupId>com.example</groupId>
        <artifactId>testing-library</artifactId>
        <version>1.0.0-SNAPSHOT</version>
        <scope>test</scope>
      </dependency>
    </dependencies>

但是我遇到java.lang.NoClassDefFoundError: com/google/common/base/Preconditions错误

2 个答案:

答案 0 :(得分:0)

如果您将代码放入src/test/java中,则该代码将成为最终jar的一部分。该代码用于在jar生成期间进行测试。

如果您的库是用于测试的帮助程序库,请将代码放入src/main/java中,并使用<scope>test</scope>在其他项目中引用它。

顺便说一句,不要对库使用Maven阴影插件或Maven程序集插件。这些主要用于独立运行的独立jar。

答案 1 :(得分:0)

好,我解决了这个问题。似乎为testing-library生成的POM.xml不包含任何依赖项。

我正在使用mvn install:install-file ... -DgeneratePom=true将jar安装到本地存储库中以进行快速调试,以这种方式生成的pom似乎缺少库依赖项