web-dev-qa-db-fra.com

ant warning: "'includeeantruntime' 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 ça veut dire?

392
user496949

Ant Runtime

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

Détails supplémentaires

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

385
Daniel Kutik

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.

69
jwfearn

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.

61
kgiannakakis

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>
26
Krishnam Raju

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.

5
slott

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

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

D'autres valeurs possibles pourraient être trouvées ici

5
Ahmad Nadeem