我是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
知道问题出在哪里?
答案 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">