Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Ant Junit任务中显示类路径构建_Ant - Fatal编程技术网

如何在Ant 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

一个已经工作了几个月的Ant junit任务突然失败,导致以前发现的类出现NoClassDefFoundError错误。有没有办法显示junit任务中构建的类路径

<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存储库基础设施,这意味着可以自动下载开放源码库及其所有依赖项。这一切都有点不可思议,但确实如此