如何从构建中排除{test}范围的依赖项?

时间:2014-03-24 12:34:33

标签: maven maven-3

我有maven的Java项目构建,它有一些依赖项。其中一个依赖项是另一个项目(我记住了Eclipse工作区),它只在test范围内。

    <dependency>
        <groupId>my.group.id</groupId>
        <artifactId>artifactid</artifactId>
        <version>1.0</version>
        <scope>test</scope>
    </dependency>

我使用项目根目录

中的以下命令构建我的项目
mvn clean package -Dmaven.test.skip=true

我期望发生的事情,maven将构建项目,留下测试依赖关系。但是抛出了未解决的依赖项异常(未解析为test作用域依赖项)。当我使用-X选项运行build命令时,我在项目构建计划中发现了以下报告:

[DEBUG] Dependencies (collect): []
[DEBUG] Dependencies (resolve): [compile, runtime, test]
[DEBUG] Repositories (dependencies): [central (http://repo.maven.apache.org/maven2, releases)]
[DEBUG] Repositories (plugins)     : [central (http://repo.maven.apache.org/maven2, releases)]
[DEBUG] -----------------------------------------------------------------------

因此,尽管跳过测试甚至编译它们(mvn clean compile运行正常),maven会尝试解析测试依赖项。

如何在跳过测试执行时从构建计划依赖项解析步骤中排除测试依赖项?

1 个答案:

答案 0 :(得分:4)

简而言之:你不能。至少不容易。 maven.test.skip不会阻止surefire:测试mojo运行,它只配置插件什么也不做。 (对于compile:testcompile也一样。)

两个mojos都需要依赖解析范围测试(mojo定义的一部分)。

因此,防止这些依赖关系被解决的唯一选择是:

  • 使用配置文件并重新绑定编译器:testCompile以及surefire:test to non existing phases
  • 将所有测试依赖项放在单独的配置文件中

但是,这两个选项都很脏。

所以你最好的选择是首先安装你的依赖工件(使用mvn install)并简单地接受maven解析依赖关系的方式。

相关问题