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

编译java文件时遇到问题(与ANT和XML相关),java,ant,Java,Ant,基本上,当我执行命令ant-f mybuild.xml clean junit TestRunner时,我的java文件中会出现很多错误,它会在junit导入中产生错误,如: java:6: error: package org.junit does not exist 下面是我的xml文件的一部分,其中给出了测试编译时的错误: <path id="test.classpath"> <pathelement location="${build.test.dir}

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

    java:6: error: package org.junit does not exist
下面是我的xml文件的一部分,其中给出了测试编译时的错误:

<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”中更改了这一点,但仍然给我相同的错误

有什么建议吗?

我怀疑:

classpathref="C:\junit-4.10"

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

您是否检查了上面的第二个“注意事项”?我认为最简单的方法是#1,将那些罐子放在
${ANT_HOME}/lib
文件夹中。这样,您就不必指定任何类路径。

将以下目标添加到构建中

<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标准位置之一。

不要将
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>
这定义了一个名为
test.classpath
的类路径的引用。您现在可以在
任务中使用它:

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

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

尝试向JAR文件添加完整路径,而不仅仅是它所在的目录。在测试编译目标的javac任务中,您没有设置任何类路径,因此显然,JUnit导入无法解决,因为junit jar不在类路径中。@JB-是的,我尝试将我的目录“C:\junit-4.10”放在junit TestRunner的classpathref中,但仍然给我相同的错误。您阅读了吗?它应该是对之前定义的路径的引用。它不应该包含目录或jar路径。它应该包含以前在build.xml文件中定义的路径的ID。类路径应该包含指向包含根包的目录的路径,以及指向jar文件的路径。嗨,Brian,是的,我已经尝试在所有classpadref上添加了这些路径,但仍然会出现相同的错误。这种方法的问题是,使您的
build.xml
依赖于系统。如果其他人签出此代码并尝试运行测试,它很可能会失败,因为他/她在系统上没有
C:\junit-4.10
。@Cebence您完全正确。最好将junit.jar放在项目中。更好的是,将常春藤与Ant一起使用,并将其从Maven存储库中取出。我不想在这一点上谈这个。然而,如果将
junit.jar
放在
$ANT_LIB
中,则情况会更糟。这使得对
junit.jar
的需求完全不可见。你现在必须弄清楚为什么这能在鲍勃的机器上工作,而不能在马克的机器上工作。至少通过这种方式,您可以看到您需要JUnit-4.10作为构建的一部分。
<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>
<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>