我是一个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">