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