E.g。如果我将BukkitApi jar作为maven项目的依赖项,并将detanecy范围设置为提供,编译,系统,运行时或测试
在哪个范围内bukkitAPI将包含在编译输出中?
答案 0 :(得分:6)
短版本:默认情况下,maven输出(在默认的target
目录中)不包含除当前项目/模块的已编译代码之外的任何内容。也就是说,没有任何依赖。
Long(呃)版本:默认jar
打包,没有自定义阶段配置。这是maven在java项目中的行为方式:
compile
阶段:.java
目录中的src/main/java/
个文件被编译为.classes
目录中的target
个文件。 compile
范围的依赖关系将下载到本地存储库。package
阶段:与1相同,另外您将在jar
目录中获得target
个文件install
阶段:与2相同,您将在本地存储库中获得jar
文件。因此,默认情况下,来自依赖项的.jar
个文件不包含在任何内容中!
现在,例如,使用assembly
插件在package
阶段的输出中包含依赖项(请参阅Including dependencies in a jar with Maven),您通常会得到以下默认行为:< / p>
provided
:不包括compile
(默认):已包含system
:不包括runtime
:包含test
:不包括结帐this link以供参考。
编辑:只需使用guice
上的不同范围值尝试此pom,当范围为{{{}时,您会看到fake-1.0-SNAPSHOT-jar-with-dependencies.jar
中包含依赖关系1}}和compile
(此示例不需要任何源文件)
runtime
答案 1 :(得分:3)
这不是Maven的工作方式。依赖项只指定类路径(用于编译,运行时,测试)。但默认情况下,依赖项不包含在输出中。您必须运送所有依赖项jar(至少是具有作用域编译和运行时的jar)。
看看依赖插件。它提供了复制依赖项的目标。
要创建发货包,请查看程序集插件(例如创建zip文件)。它甚至提供了一种创建一体化罐子的方法,如果这是你所追求的。