說我想設置一些變量,如果一個螞蟻的目標名稱包含某些單詞。這可能嗎?我可以獲得當前執行的目標名稱嗎?如何找到正在執行的螞蟻目標的名稱?
編輯:我試着用-d
運行螞蟻,我注意到一個環境變量TEMP_A
似乎持有當前目標的名稱。我想知道,這是否會跨越不同的螞蟻版本?
說我想設置一些變量,如果一個螞蟻的目標名稱包含某些單詞。這可能嗎?我可以獲得當前執行的目標名稱嗎?如何找到正在執行的螞蟻目標的名稱?
編輯:我試着用-d
運行螞蟻,我注意到一個環境變量TEMP_A
似乎持有當前目標的名稱。我想知道,這是否會跨越不同的螞蟻版本?
如果您在構建過程中需要這些信息,那麼您應該始終能夠確定目標名稱,因爲大部分時間您都在之內,目標是。因此,可以將一行代碼添加到目標主體,該目標主體根據名稱設置屬性。那將是純粹的手動方法。
也許你想要某種常規(自定義)任務,比如可以複製到任何目標並確定當前目標名稱的一行代碼。我不知道在提供這個名稱的財產構建。但是,如果您編寫自定義任務和子類org.apache.tools.ant.Task
,那麼您可能可以獲取「父」目標的名稱並構建該屬性。
(如果Apache已經在網站上公佈的API,那麼我能夠給出更精確的答案...)
編輯
,便有可能來自外部。可以實現一個監聽器並將其附加到螞蟻。所以當進入目標時,聽衆會得到通知。但問題可能是更改螞蟻內部的財產。我實際上不知道這個監聽者是否與螞蟻線程在同一個虛擬機中「生活」。
我需要在執行某個任務之前執行此操作。 – Geo 2010-07-02 12:07:04
當前正在執行的目標名稱沒有內置屬性。這顯然是通過設計;該財產出現在早期版本的Ant中,但被刪除以避免潛在的濫用。
退房這個問題:Print/Access the Name of the Currently Executing Ant Target
另外,請參閱本電子郵件主題的討論由螞蟻創造者:link text
另一種方法是通過JavaScript和Java反射。 您可以在您的ant構建文件中包含以下腳本定義。 然後只需將<currentTarget/>
放置在任何目標中即可顯示名稱。顯然,這是一個簡單的例子,但它可以以其他方式使用。
<scriptdef name="currentTarget" language="javascript">
java.lang.System.out.println(project.getThreadTask(java.lang.Thread.currentThread()).getOwningTarget());
</scriptdef>
您可以創建使用內建(因爲JDK 6)Javascript引擎,無需額外的庫需要macrodef。
類似的東西:
<project>
<!--
Loglevel defined in org.apache.tools.ant.Project
MSG_ERR = 0;
MSG_WARN = 1;
MSG_INFO = 2;
MSG_VERBOSE = 3;
MSG_DEBUG = 4;
-->
<!-- macrodef creating a property with name of executing target
optional logging to stdout via adjustable loglevel -->
<macrodef name="showtargetname">
<attribute name="property"/>
<attribute name="loglevel" default="3"/>
<sequential>
<script language="javascript">
t = self.getOwningTarget();
self.getProject().setNewProperty("@{property}", t);
self.log("TargetName => " + t, @{loglevel});
</script>
</sequential>
</macrodef>
<target name="foobar">
<showtargetname property="foo"/>
<echo>$${foo} => ${foo}</echo>
</target>
</project>
之後,你有可以作爲財產作進一步處理,F.E.的TARGETNAME使用condition task(=> contains)來檢查屬性是否包含某些字符串。
或者將「targetname包含特定字符串」的邏輯也添加到macrodef。
探討什麼是可自我,使用方法:
<script language="javascript">
for(x in self) {self.log(x);}
</script>
你在buildscript或螞蟻的代碼是什麼意思? – Redlab 2010-07-02 11:32:03
直接在螞蟻中。 – Geo 2010-07-02 11:34:04