Apache Ant中java任务的问题

时间:2011-08-30 14:44:28

标签: java apache ant

我是Apache Ant新手,我想创建一个带有运行任务的构建文件。运行任务应执行以下命令行statemenet

java -classpath C:/tmp/SYS/doodle.jar;C:/tmp/SYS/CTX.jar sys.ctx.doodle.Start

sys.ctx.doodle.Start类位于doodle.jar

我的问题是:如何在类路径中添加两个元素? 我尝试过以下方法:

<target name="run">
   <java jar="C:/tmp/SYS/doodle.jar" fork="true">
  <classpath>
      <pathelement location="C:/tmp/SYS/doodle.jar"/>
      <pathelement path="sys.ctx.doodle.Start"/>
  </classpath>
  <classpath>   
       <pathelement location="C:/tmp/SYS/CTX.jar"/>
  </classpath>
   </java>
</target>

但是在执行它时会抛出一个java.lang.NoClassDefFoundError

知道问题出在哪里?

3 个答案:

答案 0 :(得分:2)

您可以直接将命令行路径转换为Ant java task类路径属性。 Ant应该注意识别由分号分隔的jar名称组成。

<java classpath="C:/tmp/SYS/doodle.jar;C:/tmp/SYS/CTX.jar" ... >

或者您可以将其指定为当前的嵌套元素:

<java ... >
    <classpath>
        <pathelement path="C:/tmp/SYS/doodle.jar;C:/tmp/SYS/CTX.jar" />
    </classpath>
</java>

参数sys.ctx.doodle.Start看起来像您要运行的类的名称。使用classname属性将其传递给java任务。将它与类路径放在一起会导致:

<java classpath="C:/tmp/SYS/doodle.jar;C:/tmp/SYS/CTX.jar"
      classname="sys.ctx.doodle.Start" />

只有当您想要运行该jar中包含的jar时,才应使用Main-Class属性。

答案 1 :(得分:2)

使用Fileset将多个jar添加到类路径引用中似乎是一种干净的方法

示例:

<classpath>
  <pathelement path="${classpath}"/>
  <fileset dir="lib">
    <include name="*.jar"/>
  </fileset>
</classpath>

将lib目录中的所有jar添加到类路径中。

答案 2 :(得分:0)

您有太多<classpath>个元素。你需要的是单个<classpath>元素,如下所示:

<classpath>
      <pathelement location="C:/tmp/SYS/doodle.jar"/>
       <pathelement location="C:/tmp/SYS/CTX.jar"/>
  </classpath>

您需要更改<java>标记,如下所示:

<java jar="C:/tmp/SYS/doodle.jar" fork="true" classname="sys.ctx.doodle.Start">