Java 在预编译项目上使用Maven运行测试
使用Maven,我想在预编译/预jar的多模块项目上运行单元测试和集成测试。我觉得这非常困难 我的业务案例是,我想在一个地方编译和构建一个多模块Maven项目,然后让单元测试和集成测试使用不同的Java版本在不同的操作系统上运行,以检查兼容性。让我们说{java8,java10}x{Ubuntu,Windows}来保持简单 我希望以一种速度编译和安装jar的原因是,我希望确保对实际交付的代码运行测试。如果我在任何地方重新编译,我担心可能会在无意中引入错误 一种解决方案是在Ubuntu上执行Java 在预编译项目上使用Maven运行测试,java,maven,unit-testing,testing,maven-surefire-plugin,Java,Maven,Unit Testing,Testing,Maven Surefire Plugin,使用Maven,我想在预编译/预jar的多模块项目上运行单元测试和集成测试。我觉得这非常困难 我的业务案例是,我想在一个地方编译和构建一个多模块Maven项目,然后让单元测试和集成测试使用不同的Java版本在不同的操作系统上运行,以检查兼容性。让我们说{java8,java10}x{Ubuntu,Windows}来保持简单 我希望以一种速度编译和安装jar的原因是,我希望确保对实际交付的代码运行测试。如果我在任何地方重新编译,我担心可能会在无意中引入错误 一种解决方案是在Ubuntu上执行mvn
mvn部署-DaltDeploymentRepository=$mydir
,生成一个编译过的项目树和一个装满JAR的目录;然后压缩项目树和部署目录,并将它们发送到Windows计算机;在项目树上运行的是mvnsurefire:test-Dmaven.repo.local=$mydir
这是可行的,但很笨拙。Surefire似乎读取项目树中的测试类,并使用部署repo中相同项目+jar依赖项中的类进行链接。有一个问题是,-Dmaven.repo.local
Maven需要再次下载所有第三方依赖项,因为该repo只包含我的项目工件。所以是固溶体,但不是很好
相反,我一直试图做的是,只使用编译后的项目树:
- 如果我只是执行
我在解决依赖项时会遇到问题mvnsurefire:test
- 我尝试了
来修复依赖项解析,这似乎很有效-只是不适用于测试依赖项mvn compile-Dmaven.main.skip surefire:test
- 我进一步尝试了
,但由于某种原因,该构建再次无法解决测试依赖关系mvn compile-Dmaven.main.skip test compile-Dmaven.test.skip surefire:test
PS:这也与我尊敬的同事Ben遇到的问题有关:使用构建服务器(Jenkins)如何
如果您有复杂的测试场景,那么最好先构建(使用Maven)然后运行管道的另一个步骤,将文件部署到正确的服务器/测试系统上并开始测试。您是否使用像Jenkins这样的CI解决方案?我们使用TeamCity重新阅读后,我有一个问题:'如果我在任何地方重新编译,我担心可能会无意中引入错误…'这可以通过使用版本控制工具简单地防止吗?如果您总是编译相同的状态,这不是问题。例如,在不同的节点和/或不同的JDK上使用Jenkins管道?Maven项目正是这样做的……举个例子:不同操作系统和不同JDK上的Runn?我们使用TeamCity。那么您的意思是在普通本地缓存中安装我们的工件(而不是使用我们的工件引导沙盒缓存),然后启动测试运行?听起来很有希望!