2013-01-02 15 views
5

Vogliamo creare un archetipo parziale per aggiungere uno custom-pom.xml e altre risorse a un progetto esistente. Il pom personalizzato verrà quindi utilizzato nel progetto generato tramite mvn -f custom-pom.xml.Maven Archetype Plugin - Come utilizzare un archetipo parziale che non contiene pom.xml?

Il nostro archetipo contiene quindi un src/main/resources/archetype-resources/osgi-pom.xml, ma non contiene uno pom.xml nella stessa directory.

Abbiamo utilizzato archetype:generate parametrizzato in modo appropriato per eseguire questo archetipo su un progetto esistente. Questo produce:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-archetype-plugin:2.2:generate (default-cli) on project standalone-pom: org.apache.maven.archetype.exception.ArchetypeGenerationFailure: Error merging velocity templates: Unable to find resource 'archetype-resources/pom.xml' -> [Help 1] 

Come prova, abbiamo creato un manichino archetype-resources/pom.xml poi ri-correva l'obiettivo generate. Questo produce:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-archetype-plugin:2.2:generate (default-cli) on project standalone-pom: Don't override file /tmp/archetype/fabric-rf-server/pom.xml -> [Help 1] 

Abbiamo visto this example che non ha archetype-resources/pom.xml. Tuttavia, stiamo usando lo standard Archetype 2.0x, che è probabilmente il motivo per cui la tattica funziona per quell'autore ma non noi stessi.

Come possiamo risolvere questo problema? Un archetipo parziale non è adatto per l'inserimento di risorse in un progetto Maven esistente? Il progetto deve invece essere non-Maven?

Abbiamo setacciato il Maven Archetype plugin 2.2 documentation ma non si parla quasi di archetipi parziali e del loro comportamento specializzato.

risposta

4

Viene visualizzato il secondo messaggio di errore elencato in OP a causa delle proprietà POM in conflitto (artifactId, groupId e version). La rimozione di questi da archetype-resources/pom.xml ha risolto il problema.

Ciò che effettivamente accade con un archetipo parziale è che il progetto esistente ha il suo POM unito a quello nell'archetipo. Quindi questo conflitto di proprietà stava causando il fallimento della fusione.

Abbiamo individuato un'unione dopo l'esplorazione di the source code.

+0

Maven sembra soffrire di qualche grave disturbo bipolare. Se fornisco archetype-resources/pom.xml, mi dice di non riscriverlo. Se non lo do, mi dice che ne ha bisogno. Se lo do ma vuoto, si lamenta che non inizia con . Se lo avvio con , torna al passaggio 1 e mi informa di non riscrivere pom.xml. Come sei riuscito a fuggire da questo fermo22? – kaqqao

+0

@kaqqao Non sono sicuro, questo è stato tanto tempo fa.Ho ancora il file di lavoro - quando si aggiunge '' presumo che tu stia includendo tutti i soliti namespace guff ecc.? Quindi il mio lavoro inizia con questo: ' 4.0 .0 ' – KomodoDave

0

Per Non ignorare errore di file, è perché c'è uno o insiemi di file più sovrapposte, configurato per copiare i file stessi nella stessa posizione, Check di "achetype-metadata.xml" il tuo archetipo, rimuovere la configurazione duplicato avrebbe risolto questo problema

per l'istanza di sotto, se c'è un file test.xml nella cartella config, sarà processato due volte da velocità, e per il secondo processo stamperà un avviso. se il file è pom.xml, causerà errore di generazione

<fileSet filtered="true" encoding="UTF-8"> 
    <directory>config/src</directory> 
    <includes> 
    <include>**/*.vm</include> 
    <include>**/*.xml</include> 
    </includes> 
</fileSet> 
<fileSet filtered="true" encoding="UTF-8"> 
    <directory>config</directory> 
    <includes> 
    <include>**/*.xml</include> 
    </includes> 
</fileSet> 
0

Non ignorare errore di file, perché non c'è uno o più insiemi di file sovrapposte.

La rimozione dei set di file duplicati risolverebbe il problema.