在我们的Java项目中,我们希望使用一个第三方jar,它恰好有Apache Ant作为它的依赖项之一。然而,我们也使用ant来构建我们的项目和运行我们的测试套件,并且我担心在运行时,特别是在测试期间,在类路径中包含不同版本的ant类的可能性。
例如:假设ant 1.8.4 jar作为我们项目的一个依赖被拉入,并且它的一些或所有类与我们的类一起打包到一个主jar文件中,用于测试和最终发布。现在想象一下,有人使用ant 1.7使用我们的build.xml实际构建这个主jar文件,并启动在其上运行的测试套件——这会导致问题吗?
只要你遵守一些规则就应该没问题。
例如,javac任务有两个需要设置的重要属性:- includeAntRuntime:将此设置为false以从构建ANT版本 中排除jar
- includeJavaRuntime:设置为false将jar从执行ANT的JVM中排除
- fork:设置为true在派生的虚拟机上运行任务
其他任务,如junit也有类似的选项(如fork),应该隔离它们的操作,并将它们限制在您在其类路径上定义的jar中。