2010-07-27 11 views
1

J'ai essayé d'utiliser writepom en utilisant ce http://maven.apache.org/ant-tasks/examples/write-pom.html comme référence et j'ai eu des problèmes. Essentiellement, j'essaie simplement de vérifier si cela fonctionnera réellement, de sorte que le fichier POM est assez vide. Voir ci-dessous.Comment utiliser artefact: writepom et artefact: pom?

<project name="CreatePOMStructure" basedir="./test" xmlns:artifact="antlib:org.apache.maven.artifact.ant"> 
<description> 
    Test Script 
</description> 

<path id="maven-ant-tasks.classpath" path="/usr/local/apache-ant-1.8.1/lib/maven-ant-tasks-2.1.1.jar" /> 
<typedef resource="org/apache/maven/artifact/ant/antlib.xml" 
      uri="antlib:org.apache.maven.artifact.ant" 
      classpathref="maven-ant-tasks.classpath" /> 

<artifact:pom id="maven-pom" groupId="com.cgi.wealth" artifactId="maven-pom-setup" version="1.0" name="maven-setup"> 
    <license name="apache" url="http://www.apache.org"/> 
    <dependency groupId="junit" artifactId="junit" version="4.1" scope="test"/> 
    <dependency groupId="org.codehaus.plexus" artifactId="plexus-utils" version="1.5.5"/> 
</artifact:pom> 

<artifact:writepom pomRefId="mypom1" file="mypom1.xml"/> 

</project> 

je reçois cette erreur lorsque je tente de lancer fourmi

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-antrun-plugin:1.0:run (compile) on project maven-setup: Error executing ant tasks: The following error occurred while executing this line: /maven-setup/scripts/build.xml:11: java.lang.NoSuchMethodError: org.apache.maven.settings.RuntimeInfo.(Lorg/apache/maven/settings/Settings;)V -> [Help 1]

Je ne sais pas si elle est pertinente, mais avant que j'ajouté le typedef je recevais cette erreur:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-antrun-plugin:1.0:run (compile) on project maven-setup: Error executing ant tasks: The following error occurred while executing this line:/maven-setup/scripts/build.xml:9: Could not create task or type of type: antlib:org.apache.maven.artifact.ant:pom.

Ant could not find the task or a class this task relies upon.

Désolé pour la question de base la plus probable, mais je n'arrive pas à résoudre ce problème moi-même.

[EDIT]

Voici le fichier pom.xml que j'utiliser pour exécuter la construction de fourmi.

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>com.cgi.wealth</groupId> 
    <artifactId>maven-setup</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <packaging>jar</packaging> 

    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-antrun-plugin</artifactId> 

       <version>1.0</version> 
       <executions> 
        <execution> 
         <id>compile</id> 
         <phase>generate-sources</phase> 
         <configuration>    
          <tasks> 
           <ant antfile="${basedir}/scripts/build.xml" /> 
          </tasks> 
         </configuration> 
         <goals> 
          <goal>run</goal> 
         </goals> 
        </execution> 
       </executions> 
      </plugin> 
     </plugins> 
    </build> 
    <dependencies> 
     <dependency> 
      <groupId>org.apache.maven</groupId> 
      <artifactId>maven-ant-tasks</artifactId> 
      <version>2.1.1</version> 
     </dependency> 
    </dependencies>  
</project> 

Le problème avec le projet existe uniquement lors de l'exécution de la tâche maven "mvn generate-sources" (voir ci-dessus pom.xml). Quand je lance "ant", ça se construit avec succès. Tout conseil est grandement apprécié.

Répondre

2

Ce script fonctionne correctement, à condition que vous ayez placé maven-ant-tasks-2.1.1.jar dans le même répertoire que votre build.xml.
Les erreurs que vous rencontrez me disent que le chemin peut être incorrect.

De plus, il est préférable de ne pas définir basedir attribut de votre projet et utiliser un défaut (répertoire courant du build.xml)

Last but not least, artifact:writepompomRefId doit correspondre à la id de artifact:pom.

est Ci-dessous le script:

<project 
    name="CreatePOMStructure" 
    default="default" 
    xmlns:artifact="antlib:org.apache.maven.artifact.ant" 
> 
    <path id="maven-ant-tasks.classpath" path="maven-ant-tasks-2.1.1.jar" /> 

    <typedef 
    resource="org/apache/maven/artifact/ant/antlib.xml" 
    uri="antlib:org.apache.maven.artifact.ant" 
    classpathref="maven-ant-tasks.classpath" 
    /> 

    <target name="default"> 
    <artifact:pom id="maven-pom" 
     groupId="com.cgi.wealth" 
     artifactId="maven-pom-setup" 
     version="1.0" 
     name="maven-setup" 
    > 
     <license name="apache" url="http://www.apache.org"/> 
     <dependency 
     groupId="junit" 
     artifactId="junit" 
     version="4.1" 
     scope="test" 
     /> 
     <dependency 
     groupId="org.codehaus.plexus" 
     artifactId="plexus-utils" 
     version="1.5.5" 
     /> 
    </artifact:pom> 

    <artifact:writepom pomRefId="maven-pom" file="mypom1.xml"/> 
    </target> 

</project> 
+0

Malheureusement, je semble encore obtenir les mêmes erreurs lorsque je tente de le changer comme vous le suggérez. Si je déplace le fichier jar dans le même répertoire que le fichier build.xml (et changez le chemin d'accès dans le script comme vous l'avez fait), je reçois la première erreur que j'ai eu à propos de ne pas pouvoir créer la tâche. D'autres idées? – mdangelo

+0

Désolé pour la confusion, je courais le script en utilisant maven (voir pom.xml dans la question d'origine), mais fonctionne directement Ant maintenant fonctionne. Avez-vous des idées sur la façon dont je pourrais obtenir ce travail en utilisant le maven pom.xml? J'ai ajouté le pom.xml à ma question originale. En tout cas, votre aide a été grandement appréciée :) – mdangelo

+0

@mdangelo. Lisez cet article sur le référencement du chemin de classe dans le plugin antrun -> http://maven.apache.org/plugins/maven-antrun-plugin/examples/classpaths.html. Dans votre cas, je pense que le classpath dans 'typedef' devrait être' $ {org.apache.maven: maven-ant-tasks: jar} ' –