Ant JUnit ClassNotFoundException

2024-04-20

我意识到有很多类似的问题this one https://stackoverflow.com/questions/10658636/new-to-ant-classnotfoundexception-with-junit,但是在阅读了其中的大多数内容后,我似乎遇到了同样的问题,但原因不同。

我正在运行一个<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

In src/test/java/FakeObjectUnitTest.java:

// Package and imports omitted

public class FakeObjectUnitTest {
    @Test
    public void doSomething() {
        int x = 5;

        Assert.assertEquals(x, 5);
    }
}

My 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

我这样做是为了prove它看到的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>

当我在详细模式下运行 Ant 时(-v) 唯一的hint我看到了一堆警告:

忽略异常 java.util.zip.ZipException:打开 zip 文件读取资源 x 时出错

...在哪里x是类文件的名称。

I found this https://stackoverflow.com/questions/6015092/zipexception-when-running-junit-tests问题是,问题是作者将类文件添加到了类路径中,而不是 JAR(这让 JUnit 不高兴)。所以我尝试删除main.class.path and test.class.path from junit.class/path然后我得到一个异常,找不到任何类文件。

对于正在发生的事情有什么想法或想法吗?预先感谢,并对-v问题在这里,但我认为越详细越好。


您需要使用类似包的结构:
来自手册 https://ant.apache.org/manual/using.html:

只要需要指定类似路径的值,就可以使用嵌套元素。这采用以下一般形式:

    <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>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Ant JUnit ClassNotFoundException 的相关文章

随机推荐

  • 实体框架代码优先 - 将两个字段合并为一个集合

    我有这个型号和配置 public class Person public int FatherId get set public virtual Person Father get set public int MotherId get s
  • 使用内联要求

    如果我使用内联要求 如下所示 function something paths return require path join paths something etc etc 每次调用时引擎都需要吗 例子 let i 10 while i
  • 使用频带刻度的相同可重复字符串值

    我是 D3 的新手 想绘制带有 6 个水平条的图表 我的 xAxis 与它们的值是scaleLinear 的 所以我希望 yAxis 只是一个包含每个条形名称的列表 所以对于 yScale 我有 6 个名称 Games Apps Games
  • 禁用 Odoo 中看板列视图上的拖动和排序功能

    我正在 Odoo 9 中制作看板视图 以在基于 Many2one 字段的列中显示我的模型 我创建了这样的看板视图
  • matplotlib散点图颜色作为第三个变量的函数[重复]

    这个问题在这里已经有答案了 我想知道如何通过第三个变量使 matplotlib 的散点函数颜色点 问题matplotlib 中的 gnuplot linecolor 变量 https stackoverflow com questions
  • build.gradle 文件中的 IntelliJ 运行配置

    我有一个 Gradle 项目 目前可以通过以下方式导入到 IntelliJ 中 build gradle文件 IntelliJ 将设置正确的源位置并为我引入依赖项 我想做的是列出 IntelliJ 运行配置 build gradle文件 以
  • UIViewController 通话中状态栏问题

    Issue 通话状态栏消失后 模态呈现的视图控制器不会向上移动 在顶部留下 20px 的空白 透明空间 正常 没有问题 通话中 没有问题 通话中消失后 在顶部留下 20 像素高的空白 透明空间 显示下面的橙色视图 但是状态栏仍然存在于透明区
  • “您确定要离开此页面吗?”取消和确定功能

    我正在尝试执行类似于您离开的某些网站的操作 它会显示一个弹出窗口 显示 您确定要离开此页面吗 并有两个选项 取消 和 确定 我该如何做到这一点 并做到当您单击 取消 时 它只会取消该框 当他们单击 确定 时 它会执行 leaveChat 功
  • 如何仅在非整数时显示小数点?

    我用谷歌搜索过 但找不到正确的答案 假设我们有浮点数并得到它们的平均值 他们的平均值是这样的 3 5 2 5 5 7 所以我们有 4 个数字 不再在列表中的人 两个带小数的数字和两个整数 我想做的是 打印这些数字并保持这样 但我的问题是 当
  • JQuery ajax调用默认超时值

    我收到了无法复制的错误报告 但 ajax 调用超时是当前最好的猜测 所以我试图找出 jQuery 超时的默认值 ajax 称呼 有人有主意吗 在 jQuery 文档中找不到它 似乎没有标准化的默认值 我感觉默认是0 超时事件完全取决于浏览器
  • 使用 Javascript 将日期设置为 raddatepicker

    我从服务器端获取日期值并将其传递给 javascript 方法 然后使用 Javascript 将日期分配给 Telerik RadDatePicker 控件 我得到的日期为 var Date1 16 01 2013 00 00 00 fu
  • 更广泛的递归/泛型问题

    根据提出的问题和回答的问题here https stackoverflow com questions 6650532 recursive java generics between two classes 我有第二个 更复杂的一个 至少在
  • 如何过滤wireshark以仅查看从我的计算机发送/接收的dns查询?

    我是wireshark新手 正在尝试编写简单的查询 要查看仅从我的计算机发送或由我的计算机接收的 DNS 查询 我尝试了以下操作 dns and ip addr 159 25 78 7 其中 159 25 78 7 是我的 IP 地址 看起
  • IE11 中图标字体未加载

    我们使用 icomoon 作为图标字体 它们在 Chrome 和 Firefox 中运行良好 但在 IE11 中无法显示 有时 它似乎适用于第一个页面加载 但不适用于后续页面加载 清除缓存似乎不会重置它 其他IE版本也可能存在此问题 目前我
  • Android视频删除色度键背景

    我检查过this https stackoverflow com questions 12813089 i am working on android camera app i want to capture image and chang
  • Java 和 C/C++ 之间进程间通信的最快(低延迟)方法

    我有一个Java应用程序 通过TCP套接字连接到用C C 开发的 服务器 应用程序和服务器都在同一台机器 Solaris 机器 上运行 但我们最终正在考虑迁移到 Linux 交换的数据类型是简单消息 登录 登录ACK 然后客户端请求某些内容
  • 警告 - Perl 中的“哈希分配中的元素数量为奇数”

    我使用以下语法收到警告 my data variables Sno gt 5 0 ID gt 20 1 DBA gt 50 2 Address gt 80 3 Certificate gt 170 4 但在使用类似的语法时我没有收到类似的警
  • 将csv文件读取到“DataFrame”时如何指定索引的“dtype”?

    在 python 3 4 3 和 Pandas 0 16 中 如何指定dtype索引为str 以下代码是我尝试过的 In 1 from io import StringIO In 2 import pandas as pd In 3 imp
  • 设置 ItemIsMovable 标志时,子项在 QGraphicsView 中不可移动

    要调整项目中的项目QGraphicsView http qt project org doc qt 5 0 qtwidgets qgraphicsview html 我将表示顶点的子项放到要移动的项上 使用构造函数中建立的父子关系 就是下图
  • Ant JUnit ClassNotFoundException

    我意识到有很多类似的问题this one https stackoverflow com questions 10658636 new to ant classnotfoundexception with junit 但是在阅读了其中的大多