2

我有一个我正在尝试使用的 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 测试,但这会导致重复代码并且看起来像一个杂物。

有人对如何解决这个问题有任何建议吗?

4

1 回答 1

1

一个包装脚本怎么样,例如 DOS 批处理文件来强制一个 PATH,比如:

set ANT_HOME=C:\ant\ant-1.8.2
set PATH=%PATH%;%ANT_HOME%\bin
ant -f C:\mybuild.xml...

我知道您需要为 Unix 和 Windows 运行一个脚本。但是这个想法在这里有意义吗?

于 2012-08-07T03:53:06.050 回答