我收到以下警告:螞蟻警告:「‘includeantruntime’沒有設置」
[javac] build.xml:9: warning: 'includeantruntime' was not set,
defaulting to build.sysclasspath=last; set to false for repeatable builds
這是什麼意思?
我收到以下警告:螞蟻警告:「‘includeantruntime’沒有設置」
[javac] build.xml:9: warning: 'includeantruntime' was not set,
defaulting to build.sysclasspath=last; set to false for repeatable builds
這是什麼意思?
只需設置includeantruntime="false"
:
<javac includeantruntime="false" ...>...</javac>
如果你必須使用javac
-task多次,你可能要考慮使用PreSetDef
定義自己的javac
-task總是設置includeantruntime="false"
。
從http://www.coderanch.com/t/503097/tools/warning-includeantruntime-was-not-set:
這是在螞蟻1.8引入了一個不好的特性 引起的。只需將該名稱的 屬性添加到javac 任務,將其設置爲false,並忘記它發生過 。
從http://ant.apache.org/manual/Tasks/javac.html:
是否包含在Ant運行時 庫在類路徑;默認 爲是,除非build.sysclasspath是 集合。通常情況下,最好將其設置爲 ,以便腳本的行爲不是 對運行該環境的環境敏感 。
Chet Hosey寫了一個很好的解釋here:
從歷史上看,螞蟻總是包含在類路徑自己的運行時提供給javac任務。因此,無論您是否喜歡,包含在Ant中的任何庫以及任何可用於ant的庫都會自動在您的構建的類路徑中。
這是決定,這可能不是大多數人想要的。所以現在有一個選項。
如果您選擇「true」(對於includeantruntime),那麼至少您知道您的構建類路徑將包含Ant運行時。如果你選擇「false」,那麼你接受的事實是構建行爲將在舊版本和1.8+之間改變。
就像你看到這個警告一樣惱火,如果你的版本完全崩潰,你會更加不快樂。保持這種默認行爲允許未經修改的構建文件在Ant版本之間一致地工作。
我一直認爲這是史上最愚蠢的功能/消息。誰想要他們的配置管理工具中的「可重複構建」?;) – karmakaze 2012-03-07 17:10:26
丹尼爾的回答完美無缺。這裏是我添加到我的構建中的示例代碼片段。XML:
<target name="compile">
<mkdir dir="${classes.dir}"/>
<javac srcdir="${src.dir}" destdir="${classes.dir}" includeantruntime="false">
<!-- ^^^^^^^^^^^^^^^^^^^^^^^^^ -->
<classpath>
<path id="application" location="${jar.dir}/${ant.project.name}.jar"/>
<path id="junit" location="${lib.dir}/junit-4.9b2.jar"/>
</classpath>
</javac>
</target>
如果你喜歡我的命令行工作的快速回答是執行
export ANT_OPTS=-Dbuild.sysclasspath=ignore
,然後再次運行Ant腳本。
這可以幫助我*很多*。我正在使用'set ANT_OPTS = -Xms40M -Xmx512M -Dbuild.sysclasspath = ignore'。 – 2016-07-01 14:50:25
正如@Daniel Kutik所說,presetdef
是一個不錯的選擇。特別是如果一個人工作的一個項目有許多build.xml
文件哪一個不能或寧願不,編輯(例如,來自第三方。)
要使用presetdef
,在頂層build.xml
文件中添加這些行:
<presetdef name="javac">
<javac includeantruntime="false" />
</presetdef>
現在所有後續任務javac
將基本上繼承includeantruntime="false"
。如果你的項目確實需要ant運行時庫,你可以將它們明確地添加到你的構建文件或者設置includeantruntime="true"
。後者也將擺脫警告。如果需要的話
隨後javac
任務仍然可以明確地改變這一點,例如:
<javac destdir="out" includeantruntime="true">
<src path="foo.java" />
<src path="bar.java" />
</javac>
我建議你不要使用ANT_OPTS
。它有效,但它破壞了警告的目的。該警告告訴一個人的構建可能在另一個系統上的行爲不同。使用ANT_OPTS
更有可能,因爲現在每個系統都需要以相同的方式使用ANT_OPTS
。此外,ANT_OPTS
將在全球範圍適用,抑制警告無可奈何地在所有的項目
適用於改造具有多個javac任務的現有Ant構建文件。 presetdef元素只在項目元素內部。 – saxman 2012-05-29 16:29:36
@jwfearn:是否可以使用類似的'presetdef'技巧來處理非內置的Ant任務?我已經用'scalac'試過了,但是由於''build.xml'文件必須手動定義'scalac'任務,所以它們會覆蓋我在頂層設置的任何東西。 – 2012-08-26 13:12:35
需要注意的是,使用presetdef會導致一個ant警告,javac任務已被重新定義。 Addind包括每個javac任務的執行時間以避免這種情況。我不知道警告的缺點。但是這對於那些需要乾淨構建的人來說可能是有用的。 – mikijov 2012-09-27 15:53:26
我面對這一點,我檢查程序和功能。有一個更新已經安裝了jdk1.8,它與eclipse中我的老設置(jdk1.6.0)不兼容。 我安裝了該更新。 現在,我的螞蟻項目建立成功。
試試吧,希望這會有所幫助。
編譯於2010年12月20日的Apache Ant(TM)1.8.2版本 – user496949 2011-02-24 10:40:26
因此,如果您需要在類路徑中使用ant運行時,請將其設置爲yes/true,否則設置爲no/false。我想你不需要它。 – 2011-02-24 10:46:26
是不是適合你? – 2011-02-24 10:54:37