如何在ant文件中设置classpath来执行Java程序并包含外部jar?

时间:2012-04-09 18:08:11

标签: java ant jar classpath execute

我找到了关于如何设置类路径以便可以执行Java程序或包含外部jar的示例,但不是两者都有。我尝试在一个文件中组合多个示例失败了。

我的源.java文件位于src目录中,我要执行的文件是src / TEDI.java,类文件正确放入构建目录,所有我的jar都在jung2-2_0_1目录中。我可以使用以下ant文件来编译程序,但不能执行:

<?xml version="1.0"?>
<project name="TEDI" basedir="." default="execute">
    <property name="src" value="src"/>
    <property name="output" value="build"/>
    <property name="lib" value="jung2-2_0_1"/>

    <target name="execute" depends="compile">
        <echo>
            Executing TEDI.
        </echo>
        <java classname="${output}/TEDI.class">
            <classpath refid="java"/>
        </java>
    </target>

    <target name="compile" depends="create">
        <echo>
            Compiling source files.
        </echo>
        <javac destdir="${output}">            
            <src path="${src}"/>            
            <classpath refid="java"/>
        </javac>
    </target>

    <target name="clean">
        <echo>
            Deleting old class files.
        </echo>
        <delete dir="${output}"/>
    </target>

    <target name="create" depends="clean">
        <echo>
            Creating output directory.
        </echo>
        <mkdir dir="${output}"/>
    </target>

    <path id="java">
        <pathelement location="${output}"/>
        <fileset dir="${lib}">
            <include name="*.jar"/>
        </fileset>
    </path>
</project>

当我运行ant时,它会很好地执行clean,create和compile目标,然后当它执行时会显示:Could not find build/TEDI.class. Make sure you have it in your classpath

无论如何,我希望有人能在path部分告诉我我做错了什么。在阅读了一个关于如何创建执行文件的目标的示例之后,我添加了pathelement位,但它根本没有帮助。有大量的例子,其中很多都是以不同的方式做同样的事情(虽然没有人做我正在尝试做的事情),所以我无法弄清楚我正在尝试的方法是正确的去做。任何帮助或想法将不胜感激。

修改:根据Sandro的回答将<pathelement location="${build}"/>更改为<pathelement location="${output}"/>,但它根本不会更改错误消息。

2 个答案:

答案 0 :(得分:1)

java任务需要Java类名,而不是类文件的路径。 所以你应该使用

    <java classname="TEDI">

而不是

    <java classname="${output}/TEDI.class">

答案 1 :(得分:0)

由于您要执行的类似乎位于${output},因此您必须在类路径中包含${output}

尝试在您的路径中添加<pathelement location="${output}"/>