当前位置: 首页 > 知识库问答 >
问题:

maven-dependency-plugin不能排除测试范围依赖项

祖浩淼
2023-03-14
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>
            <executions>
              <execution>
                <id>copy-dependencies</id>
                <phase>package</phase>
                <goals>
                  <goal>copy-dependencies</goal>
                </goals>
              </execution>
            </executions>
          </plugin>
<configuration>
    <excludeScope>test</excludeScope>
</configuration>
[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]

PS:请不要建议我在这里使用assembly或其他fat-jar插件,因为我有意复制依赖项jar用于Docker映像构建优化:一层用于依赖项,另一层用于jar,在任何依赖项改变之前,依赖项层总是被缓存:

COPY target/dependency  /usr/lib/app/lib
COPY target/${JAR_FILE} /usr/lib/app/target.jar

共有1个答案

孟修竹
2023-03-14

解决方案可能在IncludeScope描述中:

要包括的范围。空字符串表示所有作用域(默认值)。被解释的作用域是Maven看到的作用域,而不是POM中指定的作用域。总之:

  • runtime作用域提供运行时和编译依赖项,
  • compile作用域提供编译、提供和系统依赖项,
  • test(默认)作用域提供所有依赖项,
  • 提供的作用域只提供了提供的依赖项,
  • system作用域只提供系统依赖项。
 类似资料:
  • 我试图从命令行显示我正在使用maven dependency插件版本3.1.2开发的项目的完整依赖关系树,但是目标(以及maven dependency插件中的任何其他目标)没有显示依赖关系。插件的文档(https://maven.apache.org/plugins/maven-dependency-plugin/tree-mojo.html)声明默认情况下包含所有作用域,因此不需要使用-Dsc

  • 我有一个编译和运行时所需的依赖项,但我想在运行测试时将其排除。这可能吗?也许,通过设置个人资料?但是,如何仅在生命周期阶段停用它?

  • 我想知道为什么我的简单spring boot项目不再有效。它基本上直接来自spring示例,其中一个控制器说hello world。我使用的是spring boot starter jetty和spring boot v1.1.10(也尝试了1.2.0)。我有一些使用嵌入式solr的单元测试,所以solr核心被标记为<代码> 我认为测试范围的依赖关系不应该干扰编译范围的依赖关系,并且“仅适用于测试

  • 有时,您可能需要以特定顺序调用测试用例中的方法,或者您可能希望在方法之间共享一些数据和状态。 TestNG支持这种依赖,因为它支持在测试方法之间声明显式依赖关系。 TestNG允许您指定依赖项 - 在@Test注释中使用属性dependsOnMethods ,或。 在@Test注释中使用属性dependsOnGroups 。 示例使用dependsOnMethods 创建一个类 在C:\》Test

  • 41.1 测试范围内的依赖 如果使用了spring-boot-starter-test“启动器”(scope为test),将得到以下库: JUnit —— Java程序单元测试事实上的标准 Spring Test & Spring Boot Test —— 工具类以及支持Spring Boot程序的集成测试 AssertJ —— 一个优美的断言库 http://hamcrest.org/JavaH

  • 我需要从maven Dependence插件中排除单个工件:复制依赖项。 在文档上:https://maven.apache.org/plugins/maven-dependency-plugin/copy-dependencies-mojo.html我发现了两个有趣的选择: ExcludeArtifactId,它将排除与给定工件id匹配的所有工件(组id上的通配符) ExcludeGroupId