2010-03-03 53 views
2

通過指定「-lib foo.jar」給ant,我得到foo.jar中的類被添加到ant classloader並且可用於各種任務採取類名參數。如何模仿_within_ build.xml中的「-lib foo.jar」

我想能夠指定相同的行爲,但只能從裏面 build.xml(所以我們可以在香草螞蟻上做到這一點)。

對於任務定義我們已經運作的代碼看起來像:

<taskdef resource="net/sf/antcontrib/antlib.xml" description="for/foreach tasks"> 
    <classpath> 
     <pathelement location="${active.workspace}/ant-contrib-1.X/lib/ant-contrib.jar" /> 
    </classpath> 
</taskdef> 

其中定義完全從列出的螞蟻contrib.jar提供。

「全局」ant類路徑的等價機制是什麼?

(我曾想過了,這是獲得<javac>使用ECJ-3.5.jar編譯與一個JRE的方式 - Specifying the Eclipse compiler completely from _within_ build.xml - 與螞蟻1.7兼容的方式更好的建議,歡迎:)


編輯:看來,即將釋放的版本1.0的ant4eclipse包括ecj。這並沒有回答這個問題,但可以解決我的基本問題。

回答

1

如果你決定移動到Ant 1.8你可以用以下結構:

<import> 
    <javaresource name="resource_name.xml"> 
    <classpath location="path_to_jar.jar" /> 
    </javaresource> 
</import> 
1

我已經發布了您已鏈接的問題的答案。我會在這裏重複一個通用解決方案。

閱讀Running Ant via Java,我認爲你可以編寫一個簡單的包裝器,它將正確設置一個類路徑並添加任何第三方庫到結果類路徑中。

在這裏,我只是切割,然後在加入庫到classpath從上面的鏈接粘貼示例:

<java 
     classname="org.apache.tools.ant.launch.Launcher" 
     fork="true" 
     failonerror="true" 
     dir="${sub.builddir}" 
     timeout="4000000" 
     taskname="startAnt" 
> 
    <classpath> 
     <pathelement location="${ant.home}/lib/ant-launcher.jar"/> 
     <pathelement location="/path/to/3rd-party-lib.jar"/> 
    </classpath> 
    <arg value="-buildfile"/> 
    <arg file="${sub.buildfile}"/> 
    <arg value="-Dthis=this"/> 
    <arg value="-Dthat=that"/> 
    <arg value="-Dbasedir=${sub.builddir}"/> 
    <arg value="-Dthe.other=the.other"/> 
    <arg value="${sub.target}"/> 
</java> 

我想你甚至可以通過引用${ant.file}重複使用相同的構建文件,只需要給一個不同的目標作爲入口點。

編輯

我認爲,這種解決方案只能作爲不得已措施。如果任務通常支持<classpath>標記,則將所需的庫本地添加到該特定任務。你用一個ant-contrib taskdef在你的問題中給出了一個完美的例子。

+0

所以你的建議基本上是重新推出螞蟻具有「-lib foo.jar中」的說法呢?我同意這應該是最後的措施 - 我想要一個「只需將其添加到當前類路徑」方法 – 2010-03-04 07:47:13

+0

@Thorbjørn。如果您所依賴的任務無法在當前類路徑中找到所需的庫,並且沒有提供擴展名以僅爲當前任務指定它,那麼此方法與其他任何方法一樣好。我仔細閱讀了鏈接文檔,並沒有提及任何您需要的擴展功能。也許這是要求Ant 1.9的東西。我認爲構建文件應該是自包含的,而不是依賴於全局'lib'或用戶'lib'目錄。 – 2010-03-04 14:05:32

+0

我將攜帶jar文件以及build.xml生成相對路徑。這只是它加載的問題。 – 2010-03-04 17:27:04