我有一个我正在尝试使用的 Ant build.xml 脚本。在其中,我添加了一个 taskdef 来运行一些 junit 测试。但是,我遇到了可怕的类路径问题。
因为这是一个weblogic应用程序,所以Weblogic将ANT_HOME设置为Weblogic ANT版本,即1.6.5 另外,我们正在尝试使用JUnit 4,但是Weblogic附带的JUnit是基于JUnit 3的(我相信)。
我认为告诉 Ant 使用我在项目中签入的 Ant 和 JUnit jar 而不是使用 Weblogic 版本运行是一件简单的事情,但是我无法完成这项工作。
这是我现在拥有的:
<path id="junit.classpath">
<fileset dir="${applib.dir}">
<include name="junit-4.10.jar"/>
</fileset>
</path>
<taskdef name="myjunit"
classname="org.apache.tools.ant.taskdefs.optional.junit.JUnitTask"
classpathref="junit.classpath">
<classpath>
<!-- These are here so that the junit task runs with these jars, which works -->
<pathelement location="${applib.dir}/junit-4.10.jar"/>
<pathelement location="${applib.dir}/ant-1.8.2/ant-junit4.jar"/>
</classpath>
</taskdef>
但是,无论我做什么,Ant 的类路径都不包含 JUnit/framework/Test:
BUILD FAILED
C:\build.xml:219: taskdef A class needed by class org.apache.tools.ant.taskdefs.optional.junit.JUnitTask cannot be found: j
unit/framework/Test
我认为问题在于 ANT_HOME 是由 Weblogic 设置的,因此当 Ant 启动时 ant-junit.jar 被添加到类路径中。ant -diagnostics 证实了这一点。
我能够解决这个问题的唯一方法是将 junit-4.10.jar 直接放在类路径中,或者将它放在 BEA ANT_HOME 库目录中。但是,这在生产环境中不起作用。
那么 - 我如何将 junit-4.10.jar 添加到 Ant 类路径中,以便 taskdef 不会导致 Ant 崩溃?
- 该任务仅用于在代码构建期间运行 JUnit 测试,部署时不需要它。
- 在将使用此脚本的任何和所有机器上安装 ANT 和 JUNIT 并不是一个真正的选择。
- 多个平台(unix 和 windows)需要能够运行相同的构建脚本,Windows 用于构建代码,Linux 用于部署到 Weblogic。
- 我真的不想在生产包中提供 JUnit 和 ANT jar,只是为了在部署阶段关闭 Ant,因为它甚至不会运行相关任务。
- 我可以有一个单独的 build.xml 文件来编译/运行 junit 测试,但这会导致重复代码并且看起来像一个杂物。
有人对如何解决这个问题有任何建议吗?