404 votes

avertissement des fourmis : "'includeantruntime' n'a pas été défini"

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 ?

395voto

Daniel Kutik Points 4188

Exécution d'Ant

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" .

Détails supplémentaires

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é.

0 votes

Apache Ant(TM) version 1.8.2 compilée le 20 décembre 2010

0 votes

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.

5 votes

+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...

73voto

jwfearn Points 8813

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.

1 votes

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.

0 votes

@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.

2 votes

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.

63voto

kgiannakakis Points 62727

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.

3 votes

J'ai toujours pensé que c'était la fonction/message la plus stupide qui soit. Qui veut des "constructions répétables" dans son outil de gestion de la configuration ? ;)

1 votes

Cette réponse semble être la seule qui nous indique ce que l'avertissement signifie réellement.

27voto

Krishnam Raju Points 211

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>

5voto

Ahmad Nadeem Points 484

Utilice <property name="build.sysclasspath" value="last"/> dans votre fichier build.xml

Pour plus de détails, recherchez includeAntRuntime sur Ant javac

D'autres valeurs possibles pourraient être trouvées aquí

Prograide.com

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.

Powered by:

X