簡體   English   中英

如何在 ant 文件中設置類路徑以執行 Java 程序並包含外部 jars?

[英]How to set the classpath in an ant file to execute a Java program and include external jars?

我找到了有關如何設置類路徑以便可以執行 Java 程序或包含外部 jars 的示例,但不能同時包含兩者。 我嘗試將多個示例合並到一個文件中的嘗試失敗了。

我的source.java文件在src目錄下,我要執行的文件是src/TEDI.java,class文件被正確放入build目錄,我所有的jars都在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 時,它會很好地執行清理、創建和編譯目標,然后當它開始執行時它說: Could not find build/TEDI.class. Make sure you have it in your classpath Could not find build/TEDI.class. Make sure you have it in your classpath

無論如何,我希望有人能告訴我我在path部分做錯了什么。 在閱讀了一個有關如何創建 ant 目標以執行文件的示例后,我添加了pathelement位,但它根本沒有幫助。 有很多示例,其中很多示例以不同的方式做事以實現相同的目標(雖然沒有一個完全按照我想做的做),所以我無法弄清楚哪種方式對我正在嘗試的是正確的去做。 任何幫助或想法將不勝感激。

編輯:根據 Sandro 的回答將<pathelement location="${build}"/>更改為<pathelement location="${output}"/> ,但它根本不會更改錯誤消息。

java任務需要 Java class 名稱,而不是 class 文件的路徑。 所以你應該使用

    <java classname="TEDI">

代替

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

由於您要執行的 class 似乎在${output}中,因此您必須在類路徑中包含${output}

嘗試將<pathelement location="${output}"/>添加到您的路徑中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM