Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在实现应用程序/模块中提供依赖项_Java_Maven - Fatal编程技术网

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

Java 在实现应用程序/模块中提供依赖项,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

我正在编写一个库,我想将它编译成可实现的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
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