无法找到taskdef类org.testng.TestNGAntTask

时间:2017-07-26 10:53:27

标签: ant testng

我试图让ant编译并继续获取:

  无法找到 taskdef class org.testng.TestNGAntTask

我看到的大多数示例都在类路径中有这个:${libs.dir}/testng-6.8.jar

我也尝试过:

<taskdef name="testng" classpath="${test.classpath}"
    classname="org.testng.TestNGAntTask" />

我的build.xml的一部分

<property environment="env"/>
<property name="ws.home" value="${basedir}"/>
<property name="ws.jars" value="C:\jars"/>
<property name="test.dest" value="${ws.home}/build"/>
<property name="test.src" value="${ws.home}/src"/>
<property name="ng.result" value="test-output"/>


<target name="setClassPath" unless="test.classpath">
    <path id="classpath_jars">
        <fileset dir="${ws.jars}" includes="*.jar"/>
    </path>
    <pathconvert pathsep=":" property="test.classpath" refid="classpath_jars"/>
</target>

我应该使用哪条路径,以及如何知道我拥有的testng.jar版本

enter image description here 我的日食环境的截图

如果我使用-v进行编译,我会得到:

[echo] classpath------: C:\jars\testng.jar

我将testng.jar复制到此目录但仍然没有运气。

1 个答案:

答案 0 :(得分:3)

创建任务时,请尝试使用路径引用而不是属性。例如:

<path id="classpath_jars">
  <fileset dir="${ws.jars}" includes="*.jar"/>
</path>

<taskdef name="testng" classpathref="classpath_jars" classname="org.testng.TestNGAntTask" />

未来考虑

  

我应该使用哪条路径,以及如何知道我的testng.jar版本   有

您是否考虑过为构建添加Maven样式依赖关系管理? 这可以让您更加确定您的构建过程正在使用哪些罐子。按照目前的情况,您依靠手动配置将正确的jar放在预期的目录中。

依赖关系管理是Apache ivy插件提供的功能。它提供了额外的任务,使您能够通过从Central Maven repository自动下载和缓存的jar来管理类路径。

例如:

 <ivy:cachepath pathid="build.path">
     <dependency org="org.testng" name="testng" rev="6.11" conf="default"/>
 </ivy:cachepath>

 <taskdef name="testng" classpathref="build.path" classname="org.testng.TestNGAntTask" />

以下更完整的示例演示了如何配置ANT以自动设置ivy插件,使您的构建可在所有计算机上移植。您只需要安装Java和ANT。

的build.xml

<project name="demo" default="build" xmlns:ivy="antlib:org.apache.ivy.ant">

    <!--
    ================
    Build properties
    ================
    -->
    <available classname="org.apache.ivy.Main" property="ivy.installed"/> 

    <!--
    ==========
    Build main
    ==========
    -->

    <target name="build" depends="install-ivy">
         <ivy:cachepath pathid="build.path">
             <dependency org="org.testng" name="testng" rev="6.11" conf="default"/>
         </ivy:cachepath>

         <taskdef name="testng" classpathref="build.path" classname="org.testng.TestNGAntTask" />
    </target>

    <!--
    ===========
    Build setup
    ===========
    -->
    <target name="install-ivy" description="Install ivy" unless="ivy.installed">
        <mkdir dir="${user.home}/.ant/lib"/>
        <get dest="${user.home}/.ant/lib/ivy.jar" src="http://search.maven.org/remotecontent?filepath=org/apache/ivy/ivy/2.4.0/ivy-2.4.0.jar"/>
        <fail message="Ivy has been installed. Run the build again"/>
    </target>


</project>