Java maven依赖插件可以';t排除测试范围依赖项
我正在使用将所有依赖项复制到Java maven依赖插件可以';t排除测试范围依赖项,java,maven,maven-dependency-plugin,Java,Maven,Maven Dependency Plugin,我正在使用将所有依赖项复制到target/dependency目录中。我的pom.xml是: org.apache.maven.plugins : 测试 但它会导致构建失败,并显示以下消息: [INFO] --- maven-dependency-plugin:2.10:copy-dependencies (copy-dependencies) @ app --- [INFO] --------------------------------------------------------
target/dependency
目录中。我的pom.xml
是:
org.apache.maven.plugins
:
测试
但它会导致构建失败,并显示以下消息:
[INFO] --- maven-dependency-plugin:2.10:copy-dependencies (copy-dependencies) @ app ---
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 7.006 s
[INFO] Finished at: 2021-02-15T10:32:26+03:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-dependency-plugin:2.10:copy-dependencies (copy-dependencies) on project app: Can't exclude Test scope, this will exclude everything. -> [Help 1]
我真的不明白为什么排除测试范围会排除所有内容,因为如果不排除test
scope,目标目录也包含所有运行时依赖项(以及测试dep)
排除测试依赖项会有什么问题?如何正确地做
PS:请不要建议我在这里使用assembly或其他fat jar插件,因为我有意复制依赖项jar以优化Docker映像构建:一层用于依赖项,另一层用于jar,其中依赖项层始终缓存,直到任何依赖项更改:
解决方案可能在includeScope
说明中:
范围包括。空字符串表示所有作用域(默认值)。被解释的范围是Maven看到的范围,而不是pom中指定的范围。总之:
runtime
scope提供运行时和编译依赖项
compile
scope提供了编译、提供和系统依赖项
测试
(默认)范围提供所有依赖项
provided
scope只提供了提供的依赖项
system
scope只提供系统依赖项
这意味着我将尝试使用运行时
来排除测试范围内的依赖项,即使用includeScope运行时而不是excludeScope作为测试的插件文档意味着“一切”
COPY target/dependency /usr/lib/app/lib
COPY target/${JAR_FILE} /usr/lib/app/target.jar