2009-08-01 38 views
8

我无法弄清楚为什么我从我的ant build.xml文件中得到这个异常。我检查了一切,都在类路径中。为什么要这么复杂?!ant的junit任务中的另一个java.lang.ClassNotFoundException

我在过去遇到过Ant,看起来它总是与类路径相关。我使用两种方式指向junit.jar:在eclipse中:window-> preferences-> ant-> runtime-> Ant Home->添加外部Jars,并且也在build.xml脚本中。这次Ant不能在junit任务中找到我的测试类。我指向这个班的方式有什么问题吗?

<target name="init"> 
    <property name="sourceDir" value="src"/> 
    <property name="outputDir" value="build" /> 
    <property name="junitLocation" value="C:\...\org.junit4_4.3.1\junit.jar" /> 
</target> 

<target name="clean" depends="init"> 
    <delete dir="${outputDir}" /> 
</target> 

<target name="prepare" depends="clean"> 
    <mkdir dir="${outputDir}" /> 
</target> 

<target name="compile" depends="prepare"> 
    <javac srcdir="${sourceDir}" destdir="${outputDir}" classpath="${junitLocation}"/> 
</target> 

<path id="classpath"> 
    <pathelement location="${outputDir}" /> 
    <pathelement location="${junitLocation}" /> 
</path> 

<target name="testApplication" depends="compile"> 
    <echo>Running the junit tests...</echo> 
    <junit fork="yes" haltonfailure="yes"> 
     <test name="my.package.MyTest" /> 
     <formatter type="plain" usefile="false" />  
     <classpath refid="classpath" /> 
    </junit> 
</target> 

我总是得到:

[junit] Testsuite: my.package.MyTest 
    [junit] Tests run: 1, Failures: 0, Errors: 1, Time elapsed: 0 sec 
    [junit]  Caused an ERROR 
    [junit] my.package.MyTest 
    [junit] java.lang.ClassNotFoundException: my.package.MyTest 
    [junit]  at java.net.URLClassLoader$1.run(Unknown Source) 
    [junit]  at java.security.AccessController.doPrivileged(Native Method) 
    [junit]  at java.net.URLClassLoader.findClass(Unknown Source) 
    [junit]  at java.lang.ClassLoader.loadClass(Unknown Source) 
    [junit]  at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) 
    [junit]  at java.lang.ClassLoader.loadClass(Unknown Source) 
    [junit]  at java.lang.ClassLoader.loadClassInternal(Unknown Source) 
    [junit]  at java.lang.Class.forName0(Native Method) 
    [junit]  at java.lang.Class.forName(Unknown Source) 

BUILD FAILED 

显然,蚂蚁发现的junit.jar并尝试开始测试,但为什么不能找到我的测试类?我指向编译测试类的文件夹。所以我知道junit至少在Ant的classpath上,但ClassNotFound让我困惑。

也许有任何想法?非常感谢!

+0

只需检查 - 你会看到./build/my/package/MyTest.class?你确定它的构建正确吗? – duffymo 2009-08-01 03:19:23

+0

是的,我可以看到编译的类,在正确的目录中,没有问题 – denchr 2009-08-01 03:30:15

回答

6

您确定您的测试班级在build文件夹中吗?您在单独的JVM中调用junit(fork = true),因此可能在该调用期间工作文件夹会发生更改,并且build是相对的,这可能会导致问题。

使用-verbose或-debug开关从命令行(不是来自Eclipse)运行Ant以查看详细的类路径/工作目录junit正在被调用并将结果返回到这里,如果您仍然无法解决此问题问题。

+0

我会被打死!我认为你正在做点什么!我将脚本更改为并且工作正常! 设置fork = no有什么特别的缺点吗? – denchr 2009-08-01 03:32:25

2

您不需要将JUnit jar添加到类路径中。如果蚂蚁找不到它,<junit>任务将不会运行。

我建议尝试不同的方式来指定类路径,如ant文档中所述,在http://ant.apache.org/manual/using.html#path;特别是<classpath path="${srcdir}" />可能会有所帮助。

如果没有,ChssPly76建议从命令行运行ant-debug是最好的选择。尽管如此,您仍然希望在命令提示符窗口中找到缓冲区,因为ant的调试器非常冗长。