avviso formica: "'incleantruntime' non è stato impostato"


397

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:


388

Ant Runtime

Basta impostare includeantruntime="false":

<javac includeantruntime="false" ...>...</javac>

Se devi usare il javac-task più volte potresti prendere in considerazione l'uso PreSetDefper definire il tuo javac-task che imposta sempre includeantruntime="false".

dettagli aggiuntivi

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.


Apache Ant (TM) versione 1.8.2 compilata il 20 dicembre 2010
user496949

quindi se hai bisogno del form runtime nel classpath, impostalo su yes / true, altrimenti su no / false. immagino tu non ne abbia bisogno.
Daniel Kutik,

5
+1, ottima risposta. Vorrei solo che potessi impostarlo una volta da qualche parte nel file di build invece di sporcare ogni chiamata javac con esso ...
Jonik

1
In ogni caso, cosa è impostato su True?
Lorenzo Lerate,

"Indica se includere le librerie di runtime di Ant nel percorso di classe; il valore predefinito è yes, a meno che non sia impostato build.sysclasspath. Di solito è meglio impostarlo su false in modo che il comportamento dello script non sia sensibile all'ambiente in cui viene eseguito. "
Daniel Kutik,

72

Come menzionato da @Daniel Kutik, presetdefè una buona opzione. Soprattutto se si sta lavorando a un progetto con molti build.xmlfile che non è possibile o si preferisce non modificare (ad esempio, quelli di terze parti).

Per utilizzare presetdef, aggiungi queste righe nel tuo build.xmlfile di livello superiore :

  <presetdef name="javac">
    <javac includeantruntime="false" />
  </presetdef>

Ora tutte le javacattività 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 javacattività 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_OPTSrende questo ancora più probabile perché ora ogni sistema deve utilizzare ANT_OPTSallo stesso modo. Inoltre, ANT_OPTSsi applicherà a livello globale, sopprimendo gli avvisi volenti o nolenti in tutti i tuoi progetti


1
Funziona alla grande per il retrofit di un file build Ant esistente con più attività javac. L'elemento presetdef si trova appena all'interno dell'elemento del progetto.
saxman,

@jwfearn: un presetdeftrucco simile può essere fatto funzionare per attività Ant non incorporate? Ho provato con questo scalac, ma poiché i build.xmlfile in basso devono definire manualmente l' scalacattività, hanno la precedenza su tutto ciò che ho impostato al livello superiore.
Stuart Golodetz,

2
Una nota, che l'uso di presetdef genererà un avviso di formica che l'attività javac è stata ridefinita. L'aggiunta di incleantruntime a ciascuna attività javac evita questo. Non sono a conoscenza degli svantaggi dell'avvertimento. Ma questo potrebbe essere utile per le persone che "hanno bisogno" di build pulite.
mikijov,

Sì, il presetdef dà "Cercando di ignorare la vecchia definizione di task javac"
mike jones,

62

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.


3
Ho sempre pensato che questa fosse la caratteristica / il messaggio più sciocco di sempre. Chi desidera "build ripetibili" nel loro strumento di gestione della configurazione? ;)
karmakaze

1
Questa risposta sembra essere l'unica che ci dice cosa significa effettivamente l'avvertimento.
Ty

26

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>

5

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.


Questo mi aiuta molto . Sto usando set ANT_OPTS=-Xms40M -Xmx512M -Dbuild.sysclasspath=ignore.
Paul Vargas,

5

Utilizzare <property name="build.sysclasspath" value="last"/>nel file build.xml

Per maggiori dettagli cerca includeAntRuntimein Ant javac

Altri possibili valori possono essere trovati qui


-3

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.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.