如何在Ant Junit任务中显示类路径构建
一个已经工作了几个月的Ant junit任务突然失败,导致以前发现的类出现NoClassDefFoundError错误。有没有办法显示junit任务中构建的类路径如何在Ant Junit任务中显示类路径构建,ant,Ant,一个已经工作了几个月的Ant junit任务突然失败,导致以前发现的类出现NoClassDefFoundError错误。有没有办法显示junit任务中构建的类路径 <target name="basic-junit-test" description="Run a single JUnit test. "> <junit printsummary="yes" fork="no" haltonfailure="yes"> <classpath
<target name="basic-junit-test" description="Run a single JUnit test. ">
<junit printsummary="yes" fork="no" haltonfailure="yes">
<classpath>
<pathelement location="target/WEB-INF/lib/log4j-1.2.16.jar"/>
.
. many other pathelements
.
</classpath>
<test name="com.mycompany.command.TestUNLOCKACCOUNTCommand" outfile="${report.dir}/junit_test_results" />
</junit>
</target>
.
. 许多其他因素
.
我非常喜欢在构建顶部声明Ant路径,并在各种任务中使用类路径引用
To任务可用于将类路径内容打印为属性:
<path id="test.path">
<pathelement location="target/WEB-INF/lib/log4j-1.2.16.jar"/>
.
. many other pathelements
.
</path>
<target name="echo-path" description="Echo test path">
<pathconvert targetos="unix" property="test.path.unix" refid="test.path">
<echo message="Test path: ${test.path.unix}"/>
</target>
<target name="basic-junit-test" depends="echo-path" description="Run a single JUnit test. ">
<junit printsummary="yes" fork="no" haltonfailure="yes">
<classpath>
<path refid="test.path"/>
</classpath>
<test name="com.mycompany.command.TestUNLOCKACCOUNTCommand" outfile="${report.dir}/junit_test_results" />
</junit>
</target>
.
. 许多其他因素
.
使现代化
我突然想到:一个更简单的解决方案可能是在调试模式下运行Ant。我非常喜欢在构建的顶部声明我的Ant路径,并在各种任务中使用类路径引用 To任务可用于将类路径内容打印为属性:
<path id="test.path">
<pathelement location="target/WEB-INF/lib/log4j-1.2.16.jar"/>
.
. many other pathelements
.
</path>
<target name="echo-path" description="Echo test path">
<pathconvert targetos="unix" property="test.path.unix" refid="test.path">
<echo message="Test path: ${test.path.unix}"/>
</target>
<target name="basic-junit-test" depends="echo-path" description="Run a single JUnit test. ">
<junit printsummary="yes" fork="no" haltonfailure="yes">
<classpath>
<path refid="test.path"/>
</classpath>
<test name="com.mycompany.command.TestUNLOCKACCOUNTCommand" outfile="${report.dir}/junit_test_results" />
</junit>
</target>
.
. 许多其他因素
.
使现代化
我突然想到:一个更简单的解决方案可能是在调试模式下运行Ant。这并不是我问题的答案,Mark O'Connor和Rebse给出了很好的答案,相反,这是一个更彻底的解释,解释了为什么我会首先问这个问题。我有一个ANT Junit任务,用于开发大约100个控制器类。我几个月来第一次使用它,每次测试都失败,出现classNotFound异常。找不到的类是一个我确信应该在类路径上的类,它是一个本地创建的jar文件,会自动为构建拾取。我认为类路径有问题,所以我想在测试运行时显示它
在多次尝试弄清楚发生了什么之后,我在生成classNotFound异常的代码周围放置了一个try块,我发现本地类不是未找到的类。这导致我搜索lib目录,最终(大约六个小时后)我意识到问题在于我用新版本替换了旧版本的slf4japi。有一种依赖于旧版本中的方法,而不是新版本中的方法。这并不是我问题的答案,Mark O'Connor和Rebse给出了非常好的答案,相反,这是一种更彻底的解释,解释了为什么我首先要问这个问题。我有一个ANT Junit任务,用于开发大约100个控制器类。我几个月来第一次使用它,每次测试都失败,出现classNotFound异常。找不到的类是一个我确信应该在类路径上的类,它是一个本地创建的jar文件,会自动为构建拾取。我认为类路径有问题,所以我想在测试运行时显示它
在多次尝试弄清楚发生了什么之后,我在生成classNotFound异常的代码周围放置了一个try块,我发现本地类不是未找到的类。这导致我搜索lib目录,最终(大约六个小时后)我意识到问题在于我用新版本替换了旧版本的slf4japi。有一个依赖于旧版本中的方法,而不是新版本中的方法。Mark的回答对我很有帮助,但只是一个简短的提示,因为我需要在复制答案中的示例时关闭pathconvert xml元素
<pathconvert targetos="unix" property="test.path.unix" refid="test.path" />
马克的答案对我很有帮助,但这只是一个简短的提示,因为在复制答案中的示例时,我需要关闭pathconvert xml元素
<pathconvert targetos="unix" property="test.path.unix" refid="test.path" />
Mark,谢谢您的回复。我试试看。您能告诉我如何在调试模式下从Eclipse运行Ant吗?要在调试模式下从Eclipse运行Ant,请使用=>Ant编辑器中的AntFile |上下文菜单|运行方式| 2 Ant Build…|Main选项卡| Arguments=>-debug然后runrebase,这非常有用。在调试模式下打印的信息正是我想要的。Mark,我只是想让您知道,我已将所有ANT路径定义更改为您建议的格式。您的方法清晰且易于管理。比把所有东西都塞进junit任务要好得多。@user903724我很高兴能帮上忙。马克,谢谢你的回复。我试试看。您能告诉我如何在调试模式下从Eclipse运行Ant吗?要在调试模式下从Eclipse运行Ant,请使用=>Ant编辑器中的AntFile |上下文菜单|运行方式| 2 Ant Build…|Main选项卡| Arguments=>-debug然后runrebase,这非常有用。在调试模式下打印的信息正是我想要的。Mark,我只是想让您知道,我已将所有ANT路径定义更改为您建议的格式。您的方法清晰且易于管理。比把所有东西都塞进junit任务要好得多。@user903724我很高兴能帮上忙。哎哟!我可以推荐使用像ivy这样的依赖管理工具。它将管理您构建的所有第三方jar,并确保同一jar的两个版本不存在。这是Maven引入的Java构建的关键改进之一。看:马克,在这种情况下,常春藤会保护我免受自己的愚蠢吗?它会知道新的jar不包含旧jar中使用的方法吗?在这种情况下,ivy将确保每个依赖项只使用一个版本。通常这是最新版本,前提是大多数版本都是向后兼容的,并且包含最新的方法。当然,这并不是在所有情况下都能保护你,但这肯定是一个开始。ivy的真正重要之处在于它可以插入Maven存储库基础设施,这意味着可以自动下载开放源码库及其所有依赖项。这一切都有点不可思议,但确实如此