2011-08-30 68 views
0

我是Apache Ant新手,我想创建一个包含运行任务的构建文件。运行任务需要执行下面的命令行statemenetApache Ant中的java任务问题

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

任何想法,问题可能是什么时候?

回答

2

您可以直接将命令行路径转置到Ant java task classpath属性中。 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使用。

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"> 
2

对于使用添加多个罐子到类路径参考Fileset似乎是一个干净的方式做到这一点

例如:

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

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

+0

Anto这可能是更好的方法。将需要在类路径中的库添加到lib目录中,然后将上面的代码放到build.xml中。 – Mohyt