![](/img/trans.png)
[英]another java.lang.ClassNotFoundException in ant's junit task
[英]Ant Junit task throws java.lang.ClassNotFoundException
我有一个简单的Junit测试,不断抛出java.lang.ClassNotFoundException。 下面是文件夹结构
project:
|__build.xml
|__hamcrest-core-1.3.jar
|__junit.jar
|__src:
| |__Simple.java
|__bin:
|__Simple.class
Simple.java
import org.junit.Test;
public class Simple {
@Test
public void check() {
assert (true);
}
}
build.xml
<?xml version="1.0"?>
<project name="Ant-Test" default="main">
<target name="main">
<junit printsummary="yes" fork="yes" haltonfailure="no">
<classpath path="hamcrest-core-1.3.jar" />
<classpath path="junit.jar" />
<formatter type="plain" />
<batchtest fork="yes" todir="docs">
<fileset dir="bin">
<include name="**.class" />
</fileset>
</batchtest>
</junit>
</target>
</project>
Error:
Testsuite: Simple
Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0 sec
Caused an ERROR
Simple
java.lang.ClassNotFoundException: Simple
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:582)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:185)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:496)
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Class.java:292)
请帮助我找到发生此错误的原因。 该脚本能够找到测试用例,但最终会引发错误。
请尝试使用以下文件集标记:
<fileset dir="bin">
<include name="**.java" />
</fileset>
<pathelement path="${classpath}"/>
您的情况将是:
<classpath>
<pathelement path="bin" />
<pathelement location="hamcrest-core-1.3.jar" />
<pathelement location="junit.jar" />
</classpath>
如这里解释
为了使事情更加灵活,我们添加了一项额外功能,可以匹配多个目录级别。 这可用于匹配完整的目录树或目录树中任何位置的文件。 为此, 必须使用 “ ”作为目录名称。 当**用作模式中目录的名称时,它与零个或多个目录匹配。 例如:/ test /匹配/ test /下的所有文件/目录,例如/test/x.java或/test/foo/bar/xyz.html,但不匹配/xyz.xml。
必须使用“ **”来匹配文件夹,而不是使用通配符来选择部分文件名。 使用以下方法更改您的蚂蚁:
<fileset dir="bin">
<include name="*.class" />
</fileset>
如果要选择bin /下每个目录下的所有“ * .class”文件,请使用:
<fileset dir="bin">
<include name="**/*.class" />
</fileset>
现在,测试报告编写者将导致错误原因。 您需要创建一个docs文件夹,然后一切正常。
最终的build.xml将是:
<?xml version="1.0"?>
<project name="Ant-Test" default="main">
<target name="main">
<mkdir dir="docs"/>
<junit printsummary="yes" fork="yes" haltonfailure="no">
<classpath location="hamcrest-core-1.3.jar" />
<classpath location="junit-4.12.jar" />
<classpath path="bin/" />
<formatter type="plain" />
<batchtest fork="yes" todir="docs">
<fileset dir="bin">
<include name="**/*.class" />
</fileset>
</batchtest>
</junit>
</target>
</project>
我不确定junit
任务是否允许多个classpath
节点,但是无论如何,最好只包含一个classpath
节点。 此外,您的类路径缺少classes目录。 正确的声明将是这样的:
<junit ...>
<classpath>
<pathelement path="bin"/>
<pathelement location="hamcrest-core-1.3.jar"/>
<pathelement location="junit.jar"/>
</classpath>
...
</junit>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.