我正在编写一个库,希望将其编译为可实现的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
错误
答案 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似乎缺少库依赖项