使用Weblogic中的ANT和JUNIT的本地版本运行ant build

我有一个Ant build.xml脚本,我试图使用。 其中,我添加了一个taskdef来运行一些junittesting。 但是,我遇到了可怕的类path问题。

因为这是一个weblogic应用程序,所以Weblogic将ANT_HOME设置为1.6.6的Weblogic ANT版本。另外,我们正在尝试使用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的类path都不包含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 

认为问题是由Weblogic设置ANT_HOME,Ant启动时会将ant-junit.jar添加到类path中。 ant诊断证实了这一点。

我能解决这个问题的唯一方法是把junit-4.10.jar直接放在classpath中,或者把它放在BEA ANT_HOME库目录中。 但是,这不适用于生产环境。

所以 – 我怎样才能添加junit-4.10.jar到Ant类path,所以taskdef不会导致Ant崩溃?

  • 该任务仅用于在代码构build期间运行JUnittesting,不需要部署。
  • 在任何和所有使用这个脚本的机器上安装ANT和JUNIT并不是一个真正的select。
  • 多个平台(unix和windows)需要能够运行相同的构build脚本,用于构build代码的Windows和用于部署到Weblogic的Linux。
  • 我真的不想在生产包中提供JUnit和ANT jar,只是在部署阶段closuresAnt,甚至不会运行相关任务。
  • 我可以有一个单独的build.xml文件只是为了编译/运行junittesting,但这会导致重复的代码,看起来像一个kludge。

任何人有任何build议如何解决这个问题?

如何包装脚本如DOS批处理文件强制PATH,如:

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

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