我有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会尝试解析测试依赖项。
如何在跳过测试执行时从构建计划依赖项解析步骤中排除测试依赖项?
答案 0 :(得分:4)
简而言之:你不能。至少不容易。 maven.test.skip
不会阻止surefire:测试mojo运行,它只配置插件什么也不做。 (对于compile:testcompile也一样。)
两个mojos都需要依赖解析范围测试(mojo定义的一部分)。
因此,防止这些依赖关系被解决的唯一选择是:
但是,这两个选项都很脏。
所以你最好的选择是首先安装你的依赖工件(使用mvn install
)并简单地接受maven解析依赖关系的方式。