2012-10-10 6 views
6

Ho creato un archetipo in cui è possibile impostare moduleName (o prevedere) utilizzando una proprietà necessaria moduleName, qui è l'archetype metadata xml (ridotto, che ho anche provato con risultati simili)Archetype Maven che non utilizza le proprietà per creare i nomi dei moduli

<?xml version="1.0" encoding="UTF-8"?> 
<archetype-descriptor name="modules-archetype"> 

    <requiredProperties> 
    <requiredProperty key="moduleName"> 
    </requiredProperty> 
    </requiredProperties> 

    <modules> 
    <module id="modules-${moduleName}-api" 
      dir="modules-__moduleName__-api" 
      name="modules-${moduleName}-api"> 
     <fileSets> 
     <fileSet encoding="UTF-8"> 
      <directory>src/main/java</directory> 
     </fileSet> 
     </fileSets> 
    </module> 
    </modules> 

</archetype-descriptor> 

Dopo l'installazione e generare, il valore moduleName non viene utilizzato nel nome di directory o artifactId, i valori sono resuting

For the directory:  project/module-__moduleName__-api 
For the pom/artifactId: module-${moduleName}-api 

il valore viene sostituito corretto su altri file del progetto, quindi non ho problemi di ortografia.

Ho visto un sacco di cose simili, ma tutte usano rootArtifactId, e infatti se uso rootArtifactId (come parte iniziale del nome) funziona come previsto.

Non riesci a trovare un problema simile in giro, qualche idea perché non funziona o come farlo funzionare?

risposta

2

Guardando all'interno di fonti Maven-archetipo (versione 2.2), sembra l'unico valore possibile utilizzare sia rootArtifactId estratto da DefaultFilesetArchetypeGenerator

while (subprojects.hasNext()) { 

     ModuleDescriptor project = subprojects.next(); 

     File moduleOutputDirectoryFile = new File(outputDirectoryFile 
      , StringUtils.replace(project.getDir() 
        , "__rootArtifactId__" 
        , rootArtifactId 
        )); 
     ........... 
+0

vedi bug http://jira.codehaus.org/browse/ARCHETYPE-191 che fa non chiarire le cose a molto, ma almeno il problema è già intorno a – tonio

3

Ho trovato un ragionevole work-around.

Sembra che l'unico posto dove è possibile utilizzare solo il rootArtifactId è l'elemento <module> nel descrittore archetipo, ma in ogni altro luogo è possibile utilizzare la proprietàmoduleName senza alcuna difficoltà.

Quello che ho fatto:

Usa $ {modulename} in

  • artifactId in pom del modulo
  • alcune dipendenze di default
  • La definizione del modulo nel pom principale (<module>module-${moduleName}</module>)
  • ecc.

Utilizzare __ moduleName __ in

  • nome del pacchetto in src/main/java & risorse

Nel descrittore manufatto

  • Utilizzare un nome del modulo di correzione, ad esempio modulo-campione1 & modulo-campione2 (e, naturalmente, denominare le directory all'interno di le risorse degli artefatti allo stesso modo).

cose da sistemare dopo che il progetto viene creato

  1. I moduli di nome di directory
  2. Estrarre gli elementi del modulo nel pom principale che contiene il modulo-campione [12]

Tutto questo in uno script di formica incorporato in un postcreate-pom.xml da eseguire dopo la creazione del progetto.

E ha funzionato senza intoppi.

Spero che sia utile per qualcuno.

grazie a tutti quelli che mi prendono solo il tempo di leggere la mia domanda , tonio.

+1

Ho lo stesso problema. Cosa intendi con "postcreate-pom.xml"? Esiste un modo standard per eseguire azioni post-creazione alla fine della creazione di un progetto? –

+0

Beh, non ho trovato un modo per farlo, ho appena creato il postcreate-pom.xml come parte del progetto ed eseguirlo in seguito per completare la configurazione del progetto. – tonio

1

Dopo aver generato l'archetipo da un progetto, modificare il file target\generated-sources\archetype\src\main\resources\META-INF\maven\archetype-metadata.xml.

Aggiungi

<fileSet filtered="true" packaged="true" encoding="UTF-8"> 
     <directory></directory> 
     <includes> 
     <include>pom.xml</include> 
     </includes> 
    </fileSet> 

In questo modo sarà filtrare il file pom! Quindi eseguire nuovamente mvn install.

+0

Il problema che ho avuto è stato il tentativo di utilizzare $ {artifactId} in uno dei file config .yml e non ha funzionato. Entrando nell'archetipo-metadata.xml e includendo */**. Yml funziona. Grazie – vutbao

0

archetipo-metadata.xml e la pom.xml del sub-modulo:

<?xml version="1.0" encoding="UTF-8"?> 
<archetype-descriptor name="multi-module"> 

    <modules> 
    <module name="${rootArtifactId}-ria" id="${rootArtifactId}-ria" dir="__rootArtifactId__-ria"> 
     <fileSets> 
     <fileSet filtered="true" packaged="true"> 
      <directory>src/main/java</directory> 
      <includes> 
      <include>**/*.java</include> 
      </includes> 
     </fileSet> 
     <fileSet filtered="true" packaged="true"> 
      <include>pom.xml</include> 
     </fileSet> 
     </fileSets> 
    </module> 
    </modules> 


</archetype-descriptor> 
<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/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <parent> 
    <groupId>${groupId}</groupId> 
    <artifactId>${rootArtifactId}</artifactId> 
    <version>${version}</version> 
    </parent> 

    <artifactId>${artifactId}</artifactId> 
    <packaging>war</packaging> 

</project> 
Problemi correlati