2012-08-06 106 views
2

我有一个我正在尝试使用的Ant build.xml脚本。在其中,我添加了一个taskdef来运行一些junit测试。但是,我遇到了可怕的类路径问题。因为这是一个weblogic应用程序,所以Weblogic将ANT_HOME设置为Weblogic ANT版本,该版本为1.6.5此外,我们尝试使用JUnit 4,但Weblogic附带的JUnit是基于JUnit 3的(我相信)。在Weblogic中运行ant build和ANT和JUNIT的本地版本

我认为这将是一件简单的事情,可以告诉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 /框架/测试:

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被添加到类路径中。蚂蚁诊断证实了这一点。

我一直能够解决这个问题的唯一方法是将junit-4.10.jar直接放在classpath中,或者放在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测试,但这会导致重复的代码,并且看起来像一个杂凑。

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

回答

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的脚本。但这个想法在这里有什么意义吗?

+0

这并没有真正解决我的一些关键问题:1)我必须编写多个脚本(每个平台一个),2)它取决于外部ANT安装,以及3)它没有解决缺少junit * .jar文件,该文件也必须位于类路径中,我也不特别想要将其安装到生产机器中。 – Jay 2012-08-13 20:55:53