我有范围测试的Maven依赖项。
我添加了标志Dmaven.test.skip=true
,但Maven仍然带来了测试依赖性。
如果我只想构建生产部件,有没有办法不带来测试依赖?
答案 0 :(得分:1)
标志-Dmaven.test.skip
只会跳过您运行的项目中的测试编译和执行。
使用-DskipTests
通常更好,因为这将编译测试类但不运行它们。请参阅surefire文档。
这与依赖关系无关。根据它们的范围和插件需要,它们被加载到类路径中。 surefire插件在运行单元测试时需要解析范围测试。
如果存在您不想使用的范围测试的依赖关系,则需要删除它们,或者如果它们通过传递依赖关系(依赖关系的依赖关系)进入它们,则需要将它们排除。您可以执行mvn dependency:tree
来找出jar在项目中的原因。
答案 1 :(得分:1)
这就是maven的工作原理 - 它首先尝试检查ako依赖项是否可用,无论它们的范围如何。只有这样,它才会继续测试阶段,以确定不应该执行测试。
可能的解决方法是在单独的测试maven配置文件中定义测试依赖项,当您不想运行测试时,不应用该配置文件。在下载任何依赖项之前解析配置文件,因此如果配置文件未将测试依赖项添加到有效pom,则根本不会下载它们。
答案 2 :(得分:1)
如果为测试范围添加了一些依赖项,则maven首先会检查依赖项是否可用,然后会检查范围。
您可以创建Maven概要文件,在概要文件下添加测试依赖项,并在不存在-Dmaven.test.skip
或-Dmaven.test.skip=true
选项时触发概要文件。这样,您可以使构建命令保持不变。
您可以检查这个简单的项目manage-test-dependencies-in-maven-the-proper-way,以更好地理解它。