如何避免maven在normale编译中编译testClass

时间:2012-10-22 10:13:16

标签: testing maven dependency-management

我有一个默认的maven项目:

  • / SRC /主/ JAVA
  • / src / test / java(include * Test.java)。

当我执行“mvn compile”时,maven还尝试编译/ src / test / java下的testClasses。这失败了,因为某些依赖项如JUnit属于“test”-scope。改变例如JUnit“提供”一切正常。

编译时如何避免maven编译testClasses?根据我的理解,我希望maven只在执行“testcompile”时编译这些文件。

我正在使用maven 2.2.1

4 个答案:

答案 0 :(得分:0)

只需使用跳过测试的skip maven-surefire-plugin参数以及编译测试。

答案 1 :(得分:0)

我认为这与JUnit的范围无关。通常我们将JUnit的范围设置为test(而不是provided),一切都很好。

src/test/java由Maven Compiler Plugin的testCompile目标编译。但是,您无需明确运行该目标。请查看有关Maven生命周期的主题。例如,如果你运行maven install,它会隐式地经历许多阶段(例如编译,编译测试,生成资源等),并且其中许多都受限于默认的插件目标。

如果您想避免构建测试源,则从Maven Compiler Plugin's usage page开始,如果您通过设置compiler:testCompile来关闭测试,则会跳过maven.test.skip=true

因此,如果您的单元测试尚未准备好,只需使用Maven构建,并使用-Dmaven.test.skip=true参数。

只是补充一点,在开发过程中假设“单元测试失败”是正常的,这绝对不是一个好习惯。

答案 2 :(得分:0)

pom.xml错误地定义了“sourceDirectory”。删除它修复了问题

答案 3 :(得分:0)

使用“mvn -B -Dmaven.test.skip = true clean compile”而不是命令“maven clean compile”。此参数跳过测试。