- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我意识到有很多类似的问题 this one ,但是在阅读了其中的大部分之后,我似乎遇到了同样的问题,但原因不同。
我正在运行 <junit>
在我的 Ant 构建中执行任务并得到 ClassNotFoundException
.在大多数类似相关的问题中(例如上面的那个),事实证明这是作者不同程度的简单地没有正确配置 JUnit 类路径。尽管对我来说可能完全一样,但对这些其他问题的任何建议都对我没有用。
我的项目目录结构:
MyProject/
src/main/java/
FakeObject.java
...the rest of my Java main source
src/test/java
FakeObjectUnitTest.java
...the rest of my Java test source
bin/main
FakeObject.class
...the rest of main Java binaries
bin/test
FakeObjectUnitTest.class
...the rest of main Java binaries
lib/main
...my main dependencies
lib/test
junit-4.10.jar
hamcrest-1.1.jar
...the rest of my test dependencies
gen/reports
...where JUnit should be placing all test reports
build/
build.xml
build.properties
在src/test/java/FakeObjectUnitTest.java
:
// Package and imports omitted
public class FakeObjectUnitTest {
@Test
public void doSomething() {
int x = 5;
Assert.assertEquals(x, 5);
}
}
我的 build.xml
:
<project name="" basedir="..">
<!-- Main classpath. -->
<path id="main.class.path">
<fileset dir="bin/main"/>
</path>
<!-- Test classpath. -->
<path id="test.class.path">
<fileset dir="bin/test"/>
</path>
<!-- JUnit classpath. -->
<path id="junit.class.path">
<fileset dir="lib/main" includes="*.jar"/>
<fileset dir="lib/test" includes="*.jar"/>
<path refid="main.class.path"/>
<path refid="test.class.path"/>
</path>
<!--
All previous targets omitted for brevity (such as for compiling, etc.), but
I assure you all that they work and compile FakeObject.java/FakeObjectUnitTest.java into
FakeObject.class/FakeObjectUnitTest.class respectively, and place them in the correct
bin directories.
-->
<target name="run-junit" depends="compile">
<property name="junit.path" refid="junit.class.path"/>
<echo message="JUnit ClassPath is: ${junit.path}"/>
<junit printsummary="yes" haltonerror="yes" haltonfailure="yes">
<classpath refid="junit.class.path"/>
<formatter type="xml"/>
<batchtest todir="gen/reports">
<fileset dir="src/test/java">
<include name="**/*UnitTest*.java"/>
</fileset>
</batchtest>
</junit>
</target>
</project>
当我从命令行运行这个目标时:
run-junit:
[echo] Conducting unit tests with JUnit.
[echo] JUnit ClassPath is: /<path-to-my-project>/MyProject/lib/test/hamcrest-1.1.jar:/<path-to-my-project>/MyProject/lib/test/junit-4.10.jar:/<path-to-my-project>/MyProject/bin/main/com/myproject/client/FakeObject.class:/<path-to-my-project>/MyProject/bin/test/com/myproject/client/FakeObjectUnitTest.class
[junit] Running com.myproject.client.FakeObjectUnitTest
[junit] Tests run: 1, Failures: 0, Errors: 1, Time elapsed: 0 sec
我这样做是为了证明它看到了 FakeObjectUnitTest.class
在 JUnit 类路径上。但是,它失败并出现错误。当我进入此测试的 XML TEST 报告时,我看到以下内容:
<error message="com.myproject.client.FakeObjectUnitTest" type="java.lang.ClassNotFoundException">java.lang.ClassNotFoundException: com.myproject.client.FakeObjectUnitTest
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:247)
</error>
当我以详细模式 (-v
) 运行 Ant 时,我看到的唯一提示是一堆警告:
Ignoring Exception java.util.zip.ZipException: error in opening zip file reading resource x
...哪里x
是类文件的名称。
我找到了 this关于 SO 的问题,问题原来是作者在类路径中添加了类文件,而不是 JAR(这让 JUnit 不高兴)。所以我尝试删除 main.class.path
和 test.class.path
来自 junit.class/path
然后我得到一个异常,找不到任何类文件。
关于正在发生的事情有什么想法或想法吗?在此先感谢,并对-v
表示抱歉问题在这里,但我认为越详细越好。
最佳答案
你需要使用类包结构:
From the manual :
Wherever path-like values need to be specified, a nested element can be used. This takes the general form of:
<classpath>
<pathelement path="${classpath}"/>
<pathelement location="lib/helper.jar"/>
</classpath>
所以你的解决方案看起来像:
<!-- JUnit classpath. -->
<path id="junit.class.path">
<fileset dir="lib/main" includes="*.jar"/>
<fileset dir="lib/test" includes="*.jar"/>
<pathelement location="bin/main"/>
<pathelement location="bin/test"/>
</path>
关于java - Ant JUnit ClassNotFoundException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12745465/
这个问题可能不是很清楚,所以让我用一个例子来说明我的意思。说我要复制几个文件夹: ... 但是我需要从如下所示的文本文件中加载它们,而不是在脚本中对这些文件夹
ant 和 ant clean all 的区别? 请任何人都可以清楚地说明何时使用 Ant 和 Ant 清洁所有。 C:> Ant c:> Ant 清理所有 最佳答案 “ant”运行项目的默认目标。
我想转换如下: 到: aoeu 的值可以包含任意数量的逗号分隔元素。 我可以使用 groovy Ant 任务,但不能使用 ant-contrib 中的任何
我看到了 this相关问题,但我的情况不同,所以再次询问。基本上,我必须按特定顺序运行 12 个 ant 文件。对于每个 ant 文件,我选择不同的目标,例如“创建”或“构建并部署全部”。如何创建一个
我可以编写一个在从另一个 ant 任务执行时获取参数的 ant 任务吗? 我通常试图实现的目标是重用现有任务不同的参数。 我不知道的是: ant中有这样的子任务吗? 它可以带参数吗? 如何以及在何处指
给定一个 ant 文件集,我需要对其执行一些类似 sed 的操作,将其压缩为多行字符串(每个文件有效一行),并将结果输出到文本文件。 我在寻找什么 Ant 任务? 最佳答案 Ant script ta
我有一个包含 jars 等绝对路径的属性文件。当使用这些属性时,它们以构建文件中指定的 basedir 为前缀。 我如何获得绝对路径? build.properties: mylib=/lib/myl
我有一个任务: someString someOtherString 如何连接 s
我遇到的情况涉及运行带有可选参数的 ant 构建,这些参数总是被指定但并不总是被定义,就像这样 ant -DBUILD_ENVIRONMENT=test -Dusername_ext= -Dconf.
我正在寻找一种在 Ant 文件中包含 .jar 的方法,以便我可以立即使用它并在我的目标中调用它的方法。 就我而言,它是 ant-contrib-1.0b3.jar . 最佳答案 最好的方法是将 An
我在 ant 方面比较新,在学校我有一个作业来做一个构建文件。我的问题之一是将其名称(或路径)作为 ant 参数的文件复制到“/foldercopy”。我需要做类似的事情: Ant cpfile文件.
亲爱的,我目前在检索foreach循环中设置的属性的值时遇到一些问题。也许你们中的一个可以帮助我... 目的是检查自从生成相应的jar之后,是否已修改文件夹的一个文件。这样,我知道是否必须再次生成ja
我想创建一个宏: 然后使用它: 但是,我想为隐式元素指定一个默认值......类似于: 所以我可以这样使用它:
我想将 ANT、JavaSDK 和 FlexSDK 包含到我的项目目录中。我需要我公司的人能够从源代码编译。 我有一个以以下内容开头的 build.bat 文件: ant blah/blah/blah
我想对目录中的每个文件使用 ant 脚本集只读 但 exec 不允许 filelist: The typ
如果我以 root 身份运行任务,有没有办法检测它是否以 root 身份运行并以不同的用户身份运行某些任务。 我有一些任务需要以 root 身份运行,但其他任务只需要以当前用户身份运行。 最佳答案 如
是否可以通过ant任务使用JUnit 4.6的新MaxCore运行程序? 最佳答案 从4.6开始,不幸的是没有。您需要创建自己的自定义Ant任务才能利用MaxCore功能。 关于ant - Ant J
我有一个关于 Ant 及其对环境变量的处理的问题。 为了说明我有一个小样本。 给定 Ant 构建文件 test.xml:
该文件如下所示: a1,b1 a2,b2 ... 我知道值“a2”。 如何将值“b2”转换为属性值。 我知道如何通过以下方式选择包含“a2”的行: 但是不知道如何将属性值设置为“b2”。 我
Ant 属性可以通过属性文件设置,从属性文件解析其他属性吗? 例如,我可以这样做: 和 prop2 变成“in_test_xml1”。那挺好的。 但在这种情况下,当使用输入属性文件时: prop1
我是一名优秀的程序员,十分优秀!