2011-01-11 20 views
6

Alla fine della mia formica costruire id come per chiamare l'equivalente della chiamata da linea di comandoUtilizzando Maven compito formica installare vaso per repository locale

mvn install:install-file -Dfile=my.jar -DgroupId=com.company.project -DartifactId=my_project -Dversion=1.0 -Dpackaging=jar -DgeneratePom=true 

in modo che aggiungerà il vaso di nuova costruzione ad un repository di maven su cui un altro progetto farà affidamento.

Ive ha provato con il maven-ant-task e hanno aggiunto il vaso Maven-ant-compito al progetto formica costruito e il seguente codice al build.xml:

<target name ="minstall" depends="jar"> 
    <artifact:pom id="maven_install" file="maven_install.xml" /> 
    <artifact:install file="${out.dir}/my_project.jar"> 
     <pom refid="maven_install"/> 
    </artifact:install> 
</target> 

ma sembrano mancare qualcosa come si suol lavora per me. Per cominciare ottengo l'errore nel file build.xml (ant build) dicendo

Il prefisso "artefatto" per elemento "artefatto: pom" non è associato.

Cosa sto sbagliando. Sono abbastanza nuovo per la formica?

Su una domanda effettuata qual è lo scopo del file POM associato? Io normalmente non ho una POM in questo progetto in quanto è una build formica

risposta

-2

Penso che non ha senso mettere tali comandi build.xml di Ant. Se vuoi che il tuo file jar sia installato nel tuo repository Maven, usa il comando mvn install.

Oltre a ciò, suppongo che tu stia confondendo in qualche modo lo scopo degli strumenti di Maven e Ant nel tuo progetto. Quello che suggerirei è usare Maven come strumento principale di costruzione. Puoi configurare il richiamo di obiettivi Ant nel tuo file POM se ne hai davvero bisogno. Personalmente, penso che sia la soluzione migliore per avere Ant chiamato da Maven. Gli obiettivi Maven (come clean, test, package, install e così via) sono molto semplici da usare e potenti (suppongo che tu possa leggerlo in ogni tutorial di Maven).

+4

Baran. Forse il suo progetto sta usando formiche e un progetto diverso usa Maven. – Raghuram

+0

thats correct Raghuram Ho un numero di nuovi progetti usando maven e una serie di vecchi progetti precedenti usando formica. Questi progetti precedenti devono avere i loro barattoli aggiunti al repository maven locale dopo ogni build. Ho provato ad avere una formica build.xml chiamata da Maven, ma questo non ha funzionato in modo affidabile. Sebbene abbia chiamato correttamente il file form.xml, ha generato rapidamente delle eccezioni durante la creazione della formica (la formica funziona bene solo con la formica). Sembra che avere la chiamata di formica sia diverso dall'avere una formica chiamata da sola. Alcune proprietà vengono passate dall'istanza di Maven che non ho richiesto. –

+0

Sebbene l'ID continui a risolverlo, per il momento ci ho lavorato attorno richiamando uno script batch dal file di build ant usando il comando exec. questo script richiama il comando mvn install per installare i file jar sul repository locale. –

3

Forse maven-ant-task vaso non è installato, cioè non nella vostra formica CLASSPATH. È possibile seguire this instruction per questo.

+0

ho aggiunto il task jar antispam alla directory ant lib, aggiunto la dir al classpath di windows e aggiunto anche il codice (http://maven.apache.org/ant-tasks/installation.html) a un pom locale file come da istruzioni. Ancora nessuna gioia –

+0

Puoi ricontrollare se il tuo build.xml ha lo spazio dei nomi xml Raghuram

+0

Raghuram ha ragione questo è correlato a maven-ant -compito. Vedi http://stackoverflow.com/questions/1490914/how-to-get-project-version-from-mavenss-pom-in-ant –

1

Questo messaggio significa che si sta perdendo un xmlns: attributo artefatto nel vostro build.xml. Dai uno sguardo allo installation page nei documenti per un esempio.

Quanto alla finalità del file POM, è per lo più i metadati in modo che Maven possono capire le dipendenze correttamente. In una vera build di maven descrive anche come costruire, testare e impacchettare. Ma nel tuo caso tutto ciò che viene fatto dalla formica invece.

3

Come accennato in precedenza, è necessario assicurarsi che le attività siano definite nello script della formica e che lo spazio dei nomi di risorse sia compreso.

Il file POM viene utilizzato (in questo caso) per dire al Maven repository le dipendenze del vaso si sta mettendo nel repository. Il POM dovrebbe anche specificare le informazioni di identificazione del JAR (groupId, arttifactId, numero di versione, licenza, ecc.).

A rigor di termini, non è necessario un POM esterna, è possibile definire le informazioni nel file build.xml come segue:

<!-- Assuming tasks defined, and 'artifact' namespace exists --> 
<artifact:pom id="maven_install" groupId="com.whatever" artifactId="some-jar" 
       version="1.0" packaging="jar"> 
    <dependency groupId="..." artifactId="..." version="..."/> 
    <dependency groupId="..." artifactId="..." version="..."/> 
    <license name="apache" url="http://www.apache.org"/> <!-- can be omitted --> 
</artifact:pom> 

<target name ="minstall" depends="jar"> 
    <artifact:install file="${out.dir}/my_project.jar" pomRefId="maven_install"/> 
</target> 

Quando si installa il JAR nel compito 'minstall', il POM dovrebbe essere generato con le dipendenze appropriate nel repository locale.

+4

Attualmente c'è un bug nell'operazione di installazione sopra se si utilizza un POM in memoria file. L'artefatto verrà installato come "super-pom", non come l'artefatto che hai specificato. Gli sviluppatori di Maven stanno lavorando su questo. (Citato in domanda http://stackoverflow.com/questions/4887018/artifactinstall-pushes-the-super-pom-instead-of-the-pom-i-define) – GKelly

Problemi correlati