编译java文件时遇到问题(与ANT和XML相关)

时间:2013-04-14 16:54:01

标签: java ant

基本上,当我执行命令ant -f mybuild.xml clean junit-TestRunner时,我的java文件中出现了很多错误,它在junit导入时出错,如:

    java:6: error: package org.junit does not exist

这是我的xml文件的一部分,它在test-compile上给出了错误:

<path id="test.classpath">
   <pathelement location="${build.test.dir}"/>
</path>

<target name="test-compile" depends="test-init">
      <javac srcdir="test" 
      destdir="build\test"
      includeAntRuntime="No"/>
</target>

<target name="junit-TestRunner" depends="test-compile">
  <java classname="org.junit.runner.JUnitCore" 
        classpathref="C:\junit-4.10">
    <arg value="org.example.antbook.junit.SimpleTest"/>
  </java>

  <java classname="org.junit.runner.JUnitCore" 
        classpathref="test.classpath">
    <arg value="org.eclipseguide.persistence.FilePersistenceServicesTest"/>
  </java>
</target>

我认为它找不到我的junit-4.10.jar文件所在的目录。我在'classpathref'中改变了它,但仍然给我同样的错误。

有什么建议吗?

4 个答案:

答案 0 :(得分:1)

请勿将junit.jar放入$ANT_HOME。如果这样做,则在安装新版本的Ant时,或者如果其他人签出该文件,您将导致问题。这是你的问题:

<target name="junit-TestRunner" depends="test-compile">
   <java classname="org.junit.runner.JUnitCore" 
       classpathref="C:\junit-4.10">
       <arg value="org.example.antbook.junit.SimpleTest"/>
   </java>

classpathref是类路径的 引用 。它是单独定义的,它不是jar或目录。

例如,在我调用<java>任务之前,我首先定义我的类路径引用:

<classpath id="test.classpath">
    <pathelement path="C:/junit-4.10"/>
</classpath>

这定义了一个名为test.classpath的类路径的 引用 。您现在可以在<java>任务中使用它:

<target name="junit-TestRunner" depends="test-compile">
    <classpath id="test.classpath">
        <pathelement path="C:/junit-4.10"/>
    </classpath>

   <java classname="org.junit.runner.JUnitCore" 
       classpathref="test.classpath">
       <arg value="org.example.antbook.junit.SimpleTest"/>
   </java>

您可以做的另一件事就是包含classpath,因此您不必首先定义对它的引用:

<target name="junit-TestRunner" depends="test-compile">
   <java classname="org.junit.runner.JUnitCore">
       <arg value="org.example.antbook.junit.SimpleTest"/>
       <classpath>
           <pathelement path="C:/junit-4.10"/>
       </classpath>
   </java>

顺便说一句,避免反斜杠。它可能会导致问题,因为它有时可以用作引用字符。相反,像我在上面所做的那样使用正斜杠。

答案 1 :(得分:0)

我怀疑这个:

classpathref="C:\junit-4.10"

应该指向上面的jar文件或类子目录。

答案 2 :(得分:0)

你检查了this page上的第二个“注释”吗?我认为最简单的方法是#1,将这些JAR放在${ANT_HOME}/lib文件夹中。这样您就不必指定任何类路径。

答案 3 :(得分:0)

将以下目标添加到您的构建中。

<target name="bootstrap" description="Install build dependencies">
    <mkdir dir="${user.home}/.ant/lib"/>
    <get dest="${user.home}/.ant/lib/junit.jar" src="http://search.maven.org/remotecontent?filepath=junit/junit/4.11/junit-4.11.jar"/>
</target>

这会将junit jar安装到ANT标准位置之一,以便第三方依赖。