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