2011-02-03 15 views
7

Ho un POM definito nel file Ant, la compilazione funziona correttamente, estraendo le risorse corrette dal repository, tuttavia, l'artefatto: l'installazione delle attività spinge a ' super-pom' al posto del pom a specificareartefatto: installa spinge il super-pom invece del POM che definisco

io uso il seguente file POM

<project name="my-proj" default="build" 
     xmlns:artifact="antlib:org.apache.maven.artifact.ant"> 

    <!-- Define the Maven tasks --> 
    <path id="mvn.classpath" 
     path="${env.MAVEN_HOME}/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="mvn.classpath" /> 


    <target name="set-deps"> 
    <artifact:pom id="jar.pom" packaging="jar" 
        groupId="com.me" artifactId="my-proj" 
        version="1.0-SNAPSHOT"> 
     <dependency groupId="commons-logging" 
        artifactId="commons-logging" 
        version="1.1.1"/> 
    </artifact:pom> 

    <artifact:dependencies filesetId="project.jar.files" 
      pomRefId="jar.pom"/> 
    </target> 

    <target name="compile" depends="set-deps"> 
    <mkdir dir="${basedir}/output/casses"/> 
    <javac srcdir="${basedir}/src" 
      destdir="${basedir}/output/classes" 
      classpathref="project.jar.files" /> 
    </target> 

    <target name="build" depends="compile"> 
    <jar destfile="output/${project.name}.jar" 
     basedir="${basedir}/output/classes"/> 
    </target> 

    <target name="install" depends="build"> 
    <echo message="Installing JAR file - ${project.name}.jar"/> 
    <echo message=" groupId - ${jar.pom.groupId}"/> 
    <echo message="artifactId - ${jar.pom.artifactId}"/> 
    <echo message=" version - ${jar.pom.version}"/> 
    <artifact:install file="${basedir}/output/${project.name}.jar" 
      pomRefId="jar.pom"/> 
    </target> 
</project> 

Calling ant build costruirà correttamente il file JAR, in modo che il POM è stato impostato correttamente dallo script Ant (a almeno dal punto di vista della dipendenza).

Tuttavia, chiamando ant install risulta che il JAR sia installato nel repository locale come versione super-pom 1.0. l'installazione di una seconda volta non riesce poiché una versione completa (1.0, nessun SNAPSHOT) esiste già nel repository e solo le versioni di SNAPSHOT possono essere sovrascritte.

Ho impostato groupId/manufactid/versione sul POM. Come mai non vengono raccolti? Ho provato a impostarli di nuovo sul task di installazione (pensando che ci fossero degli attributi non documentati per l'attività), ma questa attività non accetta questi attributi.

Infatti, i valori corretti verranno visualizzati prima dell'installazione, quindi il POM sa che è groupId/artifactId/version, ma fallisce l'installazione utilizzando queste impostazioni.

BTW, se è di aiuto, sto usando il file JAR 2.1.1 maven-ant-tasks, ma la versione di Maven che ho installato è 3.0.2 (non sono sicuro se le attività eseguono chiamate esterne al Maven Barattoli o se la funzionalità è interna all'attività ant di Jar).

PS. Ho provato a collocare le dipendenze in un file POM esterno e sembra funzionare, lo pom.xml non contiene nient'altro che le dipendenze e il groupId/artifactId/version (uguale al pom in-memory sopra definito), l'artefatto: pom cambia in :

<artifact:pom id="jar.pom" file="ant-pom.xml"/> 

Nessuna modifica, ma ant install ora funziona correttamente. Si tratta di un bug nei compiti di formica o c'è qualcosa che mi manca?

Dove sto lavorando ora usa Ant, e voglio evitare di dare più file da gestire come parte del processo di compilazione. Se ho bisogno di farlo lo farò, ma preferirei evitarlo!

+1

Non importa. Ho letto il log dei documenti di Maven-ant-tasks ed è già registrato come bug (numero 170 - http://jira.codehaus.org/browse/MANTTASKS-170). – GKelly

+0

Mi sono imbattuto in questo stesso problema con la versione 2.1.3. Non ci sono tempi in cui questo sarà risolto? – dnc253

+0

Non sembra esserci un intervallo di tempo per una correzione. Tuttavia, sebbene fastidioso, è un problema abbastanza facile da risolvere (basta scrivere il POM su disco, quindi utilizzare questo disco POM basato). – GKelly

risposta

6

OK, invece di aspettare una soluzione per questo problema, sono andato con un work-around. Scrivo il POM nell'installazione, quindi utilizzo il POM basato su disco per l'installazione:

... 
<target name="install" ... 
    ... 
    <artifact:writepom pomRefId="jar.pom" file="${basedir}/output/${project.name}-pom.xml" /> 
    <artifact:pom id="disk-based.pom" file="${basedir}/output/${project.name}-pom.xml" /> 

    <artifact:install file="${basedir}/output/${project.name}.jar" 
     pomRefId="disk-based.pom"/> 
</target> 
... 

Spero che questo aiuti.

Problemi correlati