1

An Ant junit task that has worked for months is suddenly failing with a NoClassDefFoundError for classes that used to be found. Is there a way to display the classpath that is built in the junit task?

<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>
4

3 回答 3

6

我非常喜欢在构建的顶部声明我的 Ant 路径并在各种任务中使用类路径引用。

路径转换任务可用于将类路径内容打印为属性:

<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。

于 2013-07-18T22:17:13.163 回答
0

马克的回答对我有帮助,但只是一个简短的说明,因为我需要在复制答案中的示例时关闭 pathconvert xml 元素。

<pathconvert targetos="unix" property="test.path.unix" refid="test.path" />
于 2014-11-19T15:37:47.503 回答
0

这不是我问题的真正答案,Mark O'Connor 和 Rebse 给出了很好的答案,相反,这是对导致我首先提出这个问题的原因的更彻底的解释。我有一个 ANT Junit 任务,我用它来开发大约 100 个控制器类。几个月来我第一次使用它,每次测试都因 classNotFound 异常而失败。没有找到的类是我确定应该在类路径上的类,它是一个本地创建的 jar 文件,会自动为构建拾取。我认为类路径有问题,所以我想在运行测试时显示它。

在多次尝试弄清楚发生了什么之后,我在产生 classNotFound 异常的代码周围放置了一个 try 块,我看到本地类不是未找到的类。这导致我搜索 lib 目录,最终(大约六个小时后)我意识到问题在于我已经用新版本替换了旧版本的 slf4j-api。对旧版本中但不在新版本中的方法存在依赖性。

于 2013-07-19T18:23:43.327 回答