Ricevo il seguente avviso:
[javac] build.xml:9: warning: 'includeantruntime' was not set,
defaulting to build.sysclasspath=last; set to false for repeatable builds
Cosa significa questo?
Ricevo il seguente avviso:
[javac] build.xml:9: warning: 'includeantruntime' was not set,
defaulting to build.sysclasspath=last; set to false for repeatable builds
Cosa significa questo?
Risposte:
Basta impostare includeantruntime="false"
:
<javac includeantruntime="false" ...>...</javac>
Se devi usare il javac
-task più volte potresti prendere in considerazione l'uso PreSetDef
per definire il tuo javac
-task che imposta sempre includeantruntime="false"
.
Da http://www.coderanch.com/t/503097/tools/warning-includeantruntime-was-not-set :
Ciò è causato da un malfunzionamento introdotto in Ant 1.8. Basta aggiungere un attributo con quel nome all'attività javac, impostarlo su false e dimenticare che non è mai successo.
Da http://ant.apache.org/manual/Tasks/javac.html :
Se includere le librerie di runtime Ant nel percorso di classe; il valore predefinito è yes, a meno che non sia impostato build.sysclasspath. Di solito è meglio impostare questo su falso in modo che il comportamento dello script non sia sensibile all'ambiente in cui viene eseguito.
Come menzionato da @Daniel Kutik, presetdef
è una buona opzione. Soprattutto se si sta lavorando a un progetto con molti build.xml
file che non è possibile o si preferisce non modificare (ad esempio, quelli di terze parti).
Per utilizzare presetdef
, aggiungi queste righe nel tuo build.xml
file di livello superiore :
<presetdef name="javac">
<javac includeantruntime="false" />
</presetdef>
Ora tutte le javac
attività successive erediteranno essenzialmente includeantruntime="false"
. Se i tuoi progetti necessitano effettivamente di librerie di runtime di formiche, puoi aggiungerle esplicitamente ai tuoi file di build o impostare includeantruntime="true"
. Quest'ultimo eliminerà anche gli avvisi.
Le javac
attività successive possono comunque modificarlo esplicitamente, se lo si desidera, ad esempio:
<javac destdir="out" includeantruntime="true">
<src path="foo.java" />
<src path="bar.java" />
</javac>
Lo sconsiglio di usare ANT_OPTS
. Funziona, ma vanifica lo scopo dell'avvertimento. L'avvertimento dice che la propria build potrebbe comportarsi diversamente su un altro sistema. L'uso ANT_OPTS
rende questo ancora più probabile perché ora ogni sistema deve utilizzare ANT_OPTS
allo stesso modo. Inoltre, ANT_OPTS
si applicherà a livello globale, sopprimendo gli avvisi volenti o nolenti in tutti i tuoi progetti
presetdef
trucco simile può essere fatto funzionare per attività Ant non incorporate? Ho provato con questo scalac
, ma poiché i build.xml
file in basso devono definire manualmente l' scalac
attività, hanno la precedenza su tutto ciò che ho impostato al livello superiore.
Chet Hosey ha scritto una bella spiegazione qui :
Storicamente, Ant includeva sempre il proprio runtime nel percorso di classe reso disponibile per l'attività javac. Quindi tutte le librerie incluse in Ant e tutte le librerie disponibili per ant sono automaticamente nel percorso di classe della tua build, che ti piaccia o no.
Fu deciso che questo probabilmente non era quello che voleva la maggior parte delle persone. Quindi ora c'è un'opzione per questo.
Se scegli "true" (per includeantruntime), almeno sai che il tuo percorso di classe build includerà il runtime Ant. Se si sceglie "false", si accetta il fatto che il comportamento della build cambierà tra le versioni precedenti e 1.8+.
Per quanto tu sia infastidito dal vedere questo avviso, saresti ancora meno felice se le tue build si fossero completamente rotte. Mantenere questo comportamento predefinito consente ai file di build non modificati di funzionare in modo coerente tra le versioni di Ant.
La risposta di Daniel funziona perfettamente. Ecco un frammento di esempio che ho aggiunto al mio build.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>
Se ti piaccio lavorare dalla riga di comando, la risposta rapida è in esecuzione
export ANT_OPTS=-Dbuild.sysclasspath=ignore
E poi esegui di nuovo il tuo script ant.
set ANT_OPTS=-Xms40M -Xmx512M -Dbuild.sysclasspath=ignore
.
ho affrontato lo stesso, ho fatto il check-in nel programma e nella funzione. è stato installato un aggiornamento per jdk1.8 che non è compatibile con la mia vecchia impostazione (jdk1.6.0) per ant in eclipse. Installa quell'aggiornamento. in questo momento, il mio progetto formica è costruire il successo.
Provalo, spero che ti sarà utile.