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!
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
Mi sono imbattuto in questo stesso problema con la versione 2.1.3. Non ci sono tempi in cui questo sarà risolto? – dnc253
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