2011-02-24 73 views

回答

363

螞蟻運行

只需設置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是 集合。通常情況下,最好將其設置爲 ,以便腳本的行爲不是 對運行該環境的環境敏感 。

+0

編譯於2010年12月20日的Apache Ant(TM)1.8.2版本 – user496949 2011-02-24 10:40:26

+0

因此,如果您需要在類路徑中使用ant運行時,請將其設置爲yes/true,否則設置爲no/false。我想你不需要它。 – 2011-02-24 10:46:26

+0

是不是適合你? – 2011-02-24 10:54:37

56

Chet Hosey寫了一個很好的解釋here

從歷史上看,螞蟻總是包含在類路徑自己的運行時提供給javac任務。因此,無論您是否喜歡,包含在Ant中的任何庫以及任何可用於ant的庫都會自動在您的構建的類路徑中。

這是決定,這可能不是大多數人想要的。所以現在有一個選項。

如果您選擇「true」(對於includeantruntime),那麼至少您知道您的構建類路徑將包含Ant運行時。如果你選擇「false」,那麼你接受的事實是構建行爲將在舊版本和1.8+之間改變。

就像你看到這個警告一樣惱火,如果你的版本完全崩潰,你會更加不快樂。保持這種默認行爲允許未經修改的構建文件在Ant版本之間一致地工作。

+3

我一直認爲這是史上最愚蠢的功能/消息。誰想要他們的配置管理工具中的「可重複構建」?;) – karmakaze 2012-03-07 17:10:26

25

丹尼爾的回答完美無缺。這裏是我添加到我的構建中的示例代碼片段。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> 
5

如果你喜歡我的命令行工作的快速回答是執行

export ANT_OPTS=-Dbuild.sysclasspath=ignore 

,然後再次運行Ant腳本。

+0

這可以幫助我*很多*。我正在使用'set ANT_OPTS = -Xms40M -Xmx512M -Dbuild.sysclasspath = ignore'。 – 2016-07-01 14:50:25

65

正如@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將在全球範圍適用,抑制警告無可奈何地在所有的項目

+0

適用於改造具有多個javac任務的現有Ant構建文件。 presetdef元素只在項目元素內部。 – saxman 2012-05-29 16:29:36

+0

@jwfearn:是否可以使用類似的'presetdef'技巧來處理非內置的Ant任務?我已經用'scalac'試過了,但是由於''build.xml'文件必須手動定義'scalac'任務,所以它們會覆蓋我在頂層設置的任何東西。 – 2012-08-26 13:12:35

+2

需要注意的是,使用presetdef會導致一個ant警告,javac任務已被重新定義。 Addind包括每個javac任務的執行時間以避免這種情況。我不知道警告的缺點。但是這對於那些需要乾淨構建的人來說可能是有用的。 – mikijov 2012-09-27 15:53:26

5

使用<property name="build.sysclasspath" value="last"/>在build.xml文件

更多細節Ant javac

其他可能的值搜索includeAntRuntime可以發現here

-3

我面對這一點,我檢查程序和功能。有一個更新已經安裝了jdk1.8,它與eclipse中我的老設置(jdk1.6.0)不兼容。 我安裝了該更新。 現在,我的螞蟻項目建立成功。

試試吧,希望這會有所幫助。