Java 在实现应用程序/模块中提供依赖项
我正在编写一个库,我想将它编译成可实现的jar,然后在其他项目/测试中使用 在我的库中,我依赖于各种JAR:okHttp、guava等,我要做的是告诉maven不要将这些依赖关系放入最终的JAR中,而是让依赖于这个库的项目/模块提供这些依赖关系 如何在maven中实现这一点 库pom.xmlJava 在实现应用程序/模块中提供依赖项,java,maven,Java,Maven,我正在编写一个库,我想将它编译成可实现的jar,然后在其他项目/测试中使用 在我的库中,我依赖于各种JAR:okHttp、guava等,我要做的是告诉maven不要将这些依赖关系放入最终的JAR中,而是让依赖于这个库的项目/模块提供这些依赖关系 如何在maven中实现这一点 库pom.xml com.example 测试库 罐子 1.0.0-SNAPSHOT 番石榴 番石榴 28.2-jre 编译 com.squareup.okhttp3 okhttp 4.3.1 编译 实现模块pom.xml
com.example
测试库
罐子
1.0.0-SNAPSHOT
番石榴
番石榴
28.2-jre
编译
com.squareup.okhttp3
okhttp
4.3.1
编译
实现模块pom.xml
com.example
实施-
1.0.0-SNAPSHOT
com.example
测试库
1.0.0-SNAPSHOT
测试
但是我得到了
java.lang.NoClassDefFoundError:com/google/common/base/premissions
error如果您将代码放入src/test/java
,则此代码不会成为最终jar的一部分。该代码用于构建jar期间的测试
如果您的库是测试的助手库,请将代码放入src/main/java
中,并在其他项目中使用test
引用它
顺便说一句,不要在库中使用Maven shade插件或Maven assembly插件。这些主要用于独立的jar,它们自己运行。好的,我解决了这个问题。为
测试库
生成的POM.xml似乎不包含任何依赖项
我正在使用
mvn安装:安装文件-DgeneratePom=true
用于将jar安装到本地存储库中以进行快速调试,并且以这种方式生成的pom似乎缺少库依赖项“basic(配置):”。高级:(瑞士军刀),(肥罐!)。。。做它自己的事情。。。和pom/dependency
wise:将范围设置为提供的
或系统
!如果您的项目是一个简单的jar
(packaging
标记是jar
,或者缺少),那么依赖项(番石榴二进制文件)就不包括在您的jar中。它们是模块的可传递依赖项,可传递依赖项由Maven管理。你的客户端也是基于maven的吗?@xerx593,我正在使用shade插件生成胖jar。但这正是我想要避免的。当使用提供的作用域时,我的结果是“ClassNotFoundException”。@Daniele,yes,maven,yes,packaging设置为“jar”。关于可传递依赖项,问题是maven没有解决这些依赖项,我最终在运行时丢失了类。尽管如此,我的库被测试项目使用,即“/src/test/java”中的大部分代码。我很好奇这是否是我更新问题的原因。使用pom.xml。最初,我的设置与您描述的相同,但由于它不起作用,我选择了shade插件,因为我知道它可以100%起作用。在实现的测试中,或者在运行实现时,您会得到NoClassDefFoundError。在运行实现的测试时,您的配置看起来是正确的,您应该这样做看番石榴。你能看一下依赖关系树吗?好的。。。这就是原因。为什么不直接运行mvn clean install
?