2010-05-10 18 views
10

Ich versuche eine Archetyp-Struktur wie diese zu erstellen, eine Webapp mit einigen benutzerdefinierten Ordnern für unser Web-Framework. Vor allem einige dynamische Ordner, die auch einige Dateien enthalten, die vom Archetyp stammen.Wie erstellt man dynamische benannte Ordner mit Maven2 Archetype?

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

Ich habe eine erforderliche Eigenschaft meiner archetype-metadata.xml einen Kurznamen für das Projekt zu haben, die unter anderem zur Erzeugung von eindeutigen Ordner verwendet wird.

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

Die Eigenschaft shortName i in einem fileSet verwenden:

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

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

Der Befehl das Urbild zu generieren:

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

Ich gehe davon aus der folgenden Ordnerstruktur zu erhalten:

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

Aber ich bekomme z.B. dieser Name ${shortName}-business als Ordner. Ohne durch die Immobilie ersetzt zu werden.

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

Wie kann ich das erreichen? Und wie kann ich Dateien unter soq-business platzieren? Ohne den Namen des Ordners zu diesem Zeitpunkt zu kennen?

Antwort

17

dachte ich genau das gleiche Problem heute ...

ich von Adam Leggett einige Blog-Eintrag gefunden, die Platzhalter in Pfade beschreibt die Verwendung: einen Blick auf https://mikeciblogs.wordpress.com/2010/01/14/working-with-custom-maven-archetypes-part-1/ (Schritt 4).

Der Trick scheint zu sein, doppelte Unterstriche anstelle der geschweiften Klammersyntax zu verwenden, also ${shortName} wird __shortName__.

Allerdings habe ich die Lösung noch nicht ausprobiert. Wenn Sie dies tun, lassen Sie uns bitte wissen, ob es funktioniert. Vielen Dank!

HTH!

+0

Danke, das funktioniert super. – codevour

+0

Der Blog ist nicht verfügbar. Vielleicht ist der Link kaputt, könnte jemand es bitte aktualisieren! –

+0

alle benötigten Informationen sind in der Antwort selbst –

2

Wie Vivian freundlicherweise darauf hingewiesen hat, gibt mein Blogeintrag einige Hinweise, wie man das macht. Eine Sache jedoch, auf die man achten sollte (was im Blog nicht explizit erwähnt wird), ist, dass diese Funktion nur mit dem Archetyp-Plugin 2.x funktioniert.

+1

Vielen Dank für diese zusätzliche Information. – codevour