Apache Ant中java任务的问题



我是一个Apache Ant新手,我想创建一个运行任务的构建文件。run任务应该执行以下命令行语句:

java -classpath C:/tmp/SYS/doodle.jar;C:/tmp/SYS/CTX.jar sys.ctx.doodle.Start
doodle.jar 中sys.ctx.doodle.Start类所在的位置

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

<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

你知道问题在哪里吗?

您可以直接将命令行路径转换为Ant java任务类路径属性。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时使用。

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

的例子:

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

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

您的<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">

相关内容

  • 没有找到相关文章

最新更新