Je reçois l'avertissement suivant:
[javac] build.xml:9: warning: 'includeantruntime' was not set,
defaulting to build.sysclasspath=last; set to false for repeatable builds
Qu'est-ce que ça veut dire?
Définissez simplement includeantruntime="false"
:
<javac includeantruntime="false" ...>...</javac>
Si vous devez utiliser la tâche javac
- plusieurs fois, vous pouvez envisager d'utiliser PreSetDef
pour définir votre propre javac
- task qui définit toujours includeantruntime="false"
.
De http://www.coderanch.com/t/503097/tools/warning-includeantruntime-was-not-set :
Cela est dû à un dysfonctionnement introduit dans Ant 1.8. Ajoutez simplement un attribut de ce nom à la tâche javac, définissez-le sur false et oubliez que cela est déjà arrivé.
De http://ant.Apache.org/manual/Tasks/javac.html :
S'il faut inclure les bibliothèques d'exécution Ant dans le chemin de classe; La valeur par défaut est Oui, sauf si build.sysclasspath est défini. Il est généralement préférable de définir la valeur sur false pour que le comportement du script ne soit pas sensible à l'environnement dans lequel il est exécuté.
Comme @Daniel Kutik l'a mentionné, presetdef
est une bonne option. Surtout si vous travaillez sur un projet avec beaucoup de fichiers build.xml
que vous ne pouvez pas ou ne voulez pas éditer (ceux de tiers, par exemple).
Pour utiliser presetdef
, ajoutez ces lignes dans votre fichier build.xml
de niveau supérieur:
<presetdef name="javac">
<javac includeantruntime="false" />
</presetdef>
Désormais, toutes les tâches javac
suivantes hériteront essentiellement de includeantruntime="false"
. Si vos projets ont réellement besoin de bibliothèques d'exécution ant, vous pouvez les ajouter explicitement à vos fichiers de construction OR set includeantruntime="true"
. Ce dernier va également se débarrasser des avertissements.
Les tâches javac
suivantes peuvent toujours le modifier explicitement, par exemple:
<javac destdir="out" includeantruntime="true">
<src path="foo.Java" />
<src path="bar.Java" />
</javac>
Je déconseille d'utiliser ANT_OPTS
. Cela fonctionne, mais cela va à l'encontre du but de l'avertissement. L'avertissement indique à celui que sa construction pourrait se comporter différemment sur un autre système. En utilisant ANT_OPTS
, cela est d'autant plus probable que tous les systèmes doivent maintenant utiliser ANT_OPTS
de la même manière. De plus, ANT_OPTS
s'appliquera globalement, supprimant les avertissements bon gré mal gré dans tous vos projets.
Chet Hosey a écrit une belle explication ici :
Historiquement, Ant incluait toujours son propre runtime dans le chemin de classe mis à la disposition de la tâche javac. Ainsi, toutes les bibliothèques incluses avec Ant, et toutes les bibliothèques disponibles pour ant, sont automatiquement dans le chemin de classe de votre construction, que cela vous plaise ou non.
Il a été décidé que ce n'était probablement pas ce que la plupart des gens voulaient. Alors maintenant, il y a une option pour cela.
Si vous choisissez "true" (pour includeeantruntime), vous savez au moins que votre chemin d'accès aux classes de génération inclura le moteur d'exécution Ant. Si vous choisissez "false", vous acceptez le fait que le comportement de génération changera entre les versions antérieures et les versions 1.8+.
Aussi ennuyé que vous soyez de voir cet avertissement, vous seriez encore moins heureux si vos builds se cassaient complètement. Le fait de conserver ce comportement par défaut permet aux fichiers de construction non modifiés de fonctionner de manière cohérente entre les versions de Ant.
La réponse de Daniel fonctionne parfaitement. Voici un exemple d'extrait que j'ai ajouté à mon 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>
Si vous aimez mon travail depuis la ligne de commande, la réponse rapide est en cours d'exécution
export ANT_OPTS=-Dbuild.sysclasspath=ignore
Et lancez à nouveau votre script ant.