gpt4 book ai didi

java - 从 Apache Ant 运行 JUnit 并包含 jar 文件会导致 "JUnitTask was not found"

转载 作者:行者123 更新时间:2023-12-02 03:36:21 25 4
gpt4 key购买 nike

我正在使用 Apache Ant 编译和运行 JUnit 测试。目前,它适用于将 ant JUnit 库作为 Ant 的一部分安装的环境,但不适用于其他环境。我想解决这个问题。我尝试过包含所需的 jar ( junit-4.12.jarhamcrest-core-1.3.jar ,如果我理解正确的话),但它不起作用。我的相关部分build.xml如下:

  <property name="build.path" location="build/src"/>
<property name="build.test.path" location="build/test"/>
<property name="lib.path.rel" value="lib"/>
<property name="junit.file" value="${lib.path.rel}/junit/junit-4.12.jar"/>
<property name="hamcrest.file" value="${lib.path.rel}/junit/hamcrest-core-1.3.jar"/>

<path id="junit.class.path">
<pathelement location="${junit.file}"/>
<pathelement location="${hamcrest.file}"/>
<pathelement location="${build.path}"/>
</path>

<target name="test-compile" depends="test-clean">
<mkdir dir="${build.test.path}"/>

<javac srcdir="${test.path}"
destdir="${build.test.path}"
includeantruntime="false">
<classpath refid="junit.class.path" />
</javac>
</target>

<target name="test" depends="test-compile">
<junit>
<classpath>
<path refid="junit.class.path"/>
<pathelement location="${build.test.path}"/>
</classpath>
<batchtest>
<fileset dir="${build.test.path}">
<include name="**/*Test*"/>
</fileset>
</batchtest>
<formatter type="brief" usefile="false"/>
</junit>
</target>

任务test-compile成功构建测试。
任务test但是,会导致以下错误:
Problem: failed to create task or type junit
Cause: the class org.apache.tools.ant.taskdefs.optional.junit.JUnitTask was not found.


我使用的是带有 Ant 1.9.2 的 CentOS 7,虽然我认为要求用户将 Ant 更新到可用的最新版本是合理的,但我无法控制他们安装的操作系统和库。因此,我想解决问题不是通过 yum install something或者诸如此类,但要找到一种正确使用 JUnit jar 文件的方法(如果可能的话)。然后,当他们拉取 git 存储库并运行任务时,它将在任何操作系统或环境上运行(因为他们将使用刚刚拉取的 jar 文件)。显然,这也意味着“仅将 jar 放在 Ant lib 目录中”将不是一个可行的解决方案。
谢谢。

最佳答案

要修复此错误,您必须将定义 JUnitTask 的 jar 传递给 ant。这个 jar 叫ant-junit.jar您可以(来自 JUnit task documentation ):

  1. 将 junit.jar 和 ant-junit.jar 放入 ANT_HOME/lib 中。
  2. 不要将它们放在 ANT_HOME/lib 中,而是将它们的位置包含在 CLASSPATH 环境变量中。
  3. 使用 -lib 将这两个 JAR 添加到您的类路径中。
  4. 使用 <classpath> 指定两个 JAR 的位置<taskdef> 中的元素在构建文件中。
  5. 将 ant-junit.jar 保留在 ANT_HOME/lib 中的默认位置,但将 junit.jar 包含在传递给 . (自 Ant 1.7 起)

对于选项 4,您只需在 ant 构建中添加如下声明:

<taskdef name="junit" classname="org.apache.tools.ant.taskdefs.optional.junit.JUnitTask">
<classpath>
<pathelement location="${lib}/ant-junit.jar"/>
<pathelement location="${lib}/ant-junit4.jar"/>
</classpath>
</taskdef>

关于java - 从 Apache Ant 运行 JUnit 并包含 jar 文件会导致 "JUnitTask was not found",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37408653/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com