2010-05-10 8 views
10

Provo a costruire una struttura di archetipo come questa, una webapp con alcune cartelle personalizzate per il nostro framework web. Soprattutto alcune cartelle dinamiche che conterranno anche alcuni file portati dall'archetipo.Come creare cartelle con nomi dinamici con Maven2 Archetype?

└───src 
    └───main 
     └───webapp 
      └───WEB-INF 
       ├───cfg 
       │ ├───log4j 
       │ └───resources 
       │  └───extensions 
       │   ├───${shortName}-business 
       │   └───${shortName}-layout 
       └───lib 

ho aggiunto una proprietà richiesta al mio archetype-metadata.xml di avere un breve nome per il progetto, che viene utilizzato tra le altre cose per la generazione di cartelle uniche.

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

La proprietà shortName io uso in un fileSet:

<fileSet> 
    <directory>[..]/resources/extensions/${shortName}-business</directory> 
</fileSet> 

<fileSet> 
    <directory>[..]/resources/extensions/${shortName}-layout</directory> 
</fileSet> 

Il comando per generare l'archetipo:

mvn archetype:generate -B \ 
     -DgroupId=com.stackoverflow \ 
     -DartifactId=stackoverflow-question -DarchetypeGroupId=com.stackoverflow \ 
     -DarchetypeArtifactId=stackoverflow-archetype -DarchetypeVersion=1.0 \ 
     -DshortName=soq 

suppongo per ottenere la seguente struttura di cartelle:

..\ 
    ├───soq-business 
    └───soq-layout 

Ma ottengo, ad es. questo nome ${shortName}-business come cartella. Senza essere sostituito con la proprietà.

..\ 
    ├───${shortName}-business 
    └───${shortName}-layout 

Come posso ottenere questo? E come posso inserire file al di sotto di soq-business? Senza sapere il nome della cartella in questo momento?

risposta

17

ho pensato lo stesso identico problema oggi ...

ho trovato un po 'di blog da Adam Leggett che descrive usando segnaposti nei percorsi: dare un'occhiata a https://mikeciblogs.wordpress.com/2010/01/14/working-with-custom-maven-archetypes-part-1/ (punto 4).

Il trucco sembra essere quello di utilizzare caratteri di sottolineatura raddoppiati anziché la sintassi delle parentesi graffe, quindidiventa __shortName__.

Tuttavia, non ho ancora provato la soluzione. Se lo fai, facci sapere se funziona. Grazie!

HTH!

+0

Grazie, funziona benissimo. – codevour

+0

Il blog non è disponibile. Forse il link è rotto, qualcuno potrebbe aggiornarlo per favore! –

+0

tutte le informazioni necessarie sono nella risposta stessa –

2

Come ha fatto notare Vivian, il mio post sul blog fornisce alcuni suggerimenti su come farlo. Tuttavia, una cosa a cui prestare attenzione (che non è esplicitamente menzionata nel blog) è che questa funzione funziona solo con il plugin dell'archetype 2.x

+1

Grazie per questa informazione aggiuntiva. – codevour