2 votes

Ant télécharge une jarre lors de la construction

J'essaie d'intégrer le contrôle forbiddenapis dans mon projet. J'ai défini cela :

<target name="forbidden-checks" depends="clean, runtime, test">
  <ivy:cachepath organisation="de.thetaphi" module="forbiddenapis" revision="2.2" inline="true" pathid="classpath"/>
  <taskdef uri="antlib:de.thetaphi.forbiddenapis" classpathref="classpath"/>
  <forbiddenapis classpathref="all-lib-classpath" dir="${build.dir}" targetVersion="${javac.version}">
    <bundledsignatures name="jdk-unsafe"/>
    <bundledsignatures name="jdk-deprecated"/>
    <bundledsignatures name="jdk-non-portable"/>
  </forbiddenapis>
</target>

all-lib-classpath inclut tous les fichiers à vérifier par le plugin forbiddenapis. Je pense que le jar de forbiddenapis ira dans le répertoire ${build.dir} . Cependant, j'obtiens cette erreur :

Problem: failed to create task or type forbiddenapis
Cause: The name is undefined.
Action: Check the spelling.
Action: Check that any custom tasks/types have been declared.
Action: Check that any <presetdef>/<macrodef> declarations have taken place.

1voto

Denis Kurochkin Points 561

Vous devez déclarer un espace de noms pour forbiddenapis tâche d'Ivy :

<project xmlns:ivy="antlib:org.apache.ivy.ant" xmlns:fa="antlib:de.thetaphi.forbiddenapis">
...
    <fa:forbiddenapis ... >

Ou déclarer explicitement le nom de la tâche :

<taskdef name="forbiddenapis"
         classname="de.thetaphi.forbiddenapis.ant.AntTask"
         classpath="path/to/forbiddenapis.jar"/>

Quoi qu'il en soit, consultez la documentation https://github.com/policeman-tools/forbidden-apis/wiki/AntUsage

1voto

Mark O'Connor Points 33201

Les fichiers ne sont pas téléchargés dans votre espace de travail. Les fichiers ne sont pas téléchargés dans votre espace de travail. chemin d'accès va faire deux choses, télécharger et mettre en cache les jars dans le répertoire par défaut "~/.ivy2/cache" et ensuite créer un chemin Ant basé sur ces jars mis en cache.

Deuxièmement, comme l'a souligné @Denis Kurochkin, la tâche que vous utilisez nécessite apparemment la déclaration d'un espace de noms, ce qui n'est pas inhabituel avec les tâches Ant modernes.

Enfin, je n'ai pas pu résister à l'envie de vous montrer comment vous pouvez configurer votre build ANT pour installer le jar ivy s'il est manquant, ce qui rend votre build encore plus autonome.

Exemple

build.xml

<project name="demo" default="forbidden-checks" xmlns:ivy="antlib:org.apache.ivy.ant" xmlns:fa="antlib:de.thetaphi.forbiddenapis">

  <available classname="org.apache.ivy.Main" property="ivy.installed"/>

  <target name="resolve" depends="install-ivy">
    <ivy:cachepath pathid="classpath">
      <dependency org="de.thetaphi" name="forbiddenapis" rev="2.2" />
    </ivy:cachepath>

    <ivy:cachepath pathid="all-lib-classpath">
      <dependency .... />
      <dependency .... />
      <dependency .... />
    </ivy:cachepath>
  </target>

  <target name="forbidden-checks" depends="resolve">

    <taskdef uri="antlib:de.thetaphi.forbiddenapis" classpathref="classpath"/>

    <fa:forbiddenapis classpathref="all-lib-classpath" dir="${build.dir}" targetVersion="${javac.version}">
      <bundledsignatures name="jdk-unsafe"/>
      <bundledsignatures name="jdk-deprecated"/>
      <bundledsignatures name="jdk-non-portable"/>
    </fa:forbiddenapis>
  </target>

  <target name="install-ivy" unless="ivy.installed">
    <mkdir dir="${user.home}/.ant/lib"/>
    <get dest="${user.home}/.ant/lib/ivy.jar" src="http://search.maven.org/remotecontent?filepath=org/apache/ivy/ivy/2.4.0/ivy-2.4.0.jar"/>
    <fail message="Ivy has been installed. Run the build again"/>
  </target>

</project>

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