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 cela signifie ?
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 cela signifie ?
Tout simplement includeantruntime="false"
:
<javac includeantruntime="false" ...>...</javac>
Si vous devez utiliser le javac
-plusieurs fois, vous pouvez envisager d'utiliser la fonction PreSetDef
pour définir votre propre javac
-qui définit toujours includeantruntime="false"
.
De http://www.coderanch.com/t/503097/tools/warning-includeantruntime-was-not-set :
C'est dû à un défaut de fonctionnalité introduite dans Ant 1.8. Il suffit d'ajouter un attribut de ce nom à la tâche javac , mettez-le à false, et oubliez-le. que c'est arrivé.
De http://ant.apache.org/manual/Tasks/javac.html :
Si l'on inclut le run-time Ant dans le classpath ; la valeur par défaut est par défaut à yes, à moins que build.sysclasspath ne soit défini. Il est généralement préférable de mettre cette valeur à false afin que le comportement du script ne soit pas sensible à l'environnement dans lequel il est exécuté.
Donc si vous avez besoin du runtime ant dans le classpath mettez-le à yes/true sinon à no/false. je suppose que vous n'en avez pas besoin.
+1, Bonne réponse. J'aimerais juste pouvoir régler ça une fois quelque part dans le fichier de construction au lieu de le mettre dans chaque appel à javac...
Comme l'a mentionné @Daniel Kutik, presetdef
est une bonne option. Surtout si l'on travaille sur un projet comportant de nombreux éléments. build.xml
les fichiers que l'on ne peut pas, ou ne préfère pas, modifier (par exemple, ceux de tiers).
Pour utiliser presetdef
ajoutez ces lignes dans votre niveau supérieur build.xml
fichier :
<presetdef name="javac">
<javac includeantruntime="false" />
</presetdef>
Maintenant, tous les javac
les tâches hériteront essentiellement includeantruntime="false"
. Si vos projets ont effectivement besoin des bibliothèques d'exécution ant, vous pouvez soit les ajouter explicitement à vos fichiers de construction, soit définir l'option suivante includeantruntime="true"
. Ce dernier permet également de se débarrasser des avertissements.
Par la suite, javac
Les tâches peuvent toujours modifier explicitement ce paramètre si vous le souhaitez, par exemple :
<javac destdir="out" includeantruntime="true">
<src path="foo.java" />
<src path="bar.java" />
</javac>
Je vous déconseille d'utiliser ANT_OPTS
. Cela fonctionne, mais cela va à l'encontre de l'objectif de l'avertissement. L'avertissement dit à quelqu'un que sa construction pourrait se comportent différemment sur un autre système. Utilisation de ANT_OPTS
rend cela encore plus probable car maintenant chaque système doit utiliser ANT_OPTS
de la même manière. Aussi, ANT_OPTS
s'appliquera globalement, supprimant les avertissements dans tous vos projets.
Fonctionne très bien pour adapter un fichier de construction Ant existant avec de multiples tâches javac. L'élément presetdef se place juste à l'intérieur de l'élément project.
@jwfearn : Est-ce qu'une presetdef
peut être utilisé pour les tâches Ant non intégrées ? J'ai essayé avec scalac
mais parce qu'en bas de l'échelle build.xml
doivent définir manuellement les fichiers scalac
ils remplacent ce que j'ai défini au niveau supérieur.
Une note, que l'utilisation de presetdef causera un avertissement ant que la tâche javac a été redéfinie. Ajouter includeantruntime à chaque tâche javac évite cela. Je ne suis pas conscient des inconvénients de cet avertissement. Mais cela pourrait être utile pour les personnes qui ont besoin de constructions propres.
Chet Hosey a écrit une belle explication aquí :
Historiquement, Ant a toujours inclus son propre runtime dans le classpath mis à 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 classpath de votre build, que vous le vouliez ou non.
Il a été décidé que ce n'était probablement pas ce que la plupart des gens voulaient. Il y a donc maintenant une option pour cela.
Si vous choisissez "true" (pour includeantruntime), vous savez au moins que votre classpath de compilation inclura le runtime Ant. Si vous choisissez "false", vous acceptez le fait que le comportement de construction changera entre les anciennes versions et la 1.8+.
Aussi ennuyé que vous soyez de voir cet avertissement, vous seriez encore moins heureux si vos constructions se cassaient complètement. Le maintien de ce comportement par défaut permet aux fichiers de compilation non modifiés de fonctionner de manière cohérente entre les versions de Ant.
La réponse de Daniel est parfaite. 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>
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.