2010-05-10 10 views
10

Staram się zbudować taką strukturę archetypu, webapp z pewnymi niestandardowymi folderami dla naszej platformy internetowej. Zwłaszcza niektóre foldery dynamiczne, które również będą zawierać pliki przynoszone przez archetyp.W jaki sposób utworzyć dynamiczne foldery o nazwach z archetypem Maven2?

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

dodałem wymaganych własności do mojego archetype-metadata.xml mieć krótszą nazwę dla projektu, który służy między innymi do generowania unikalnych foldery.

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

Obiekt shortName używam w fileSet:

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

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

Polecenie wygenerowania Archetyp:

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

I przypuszczać, aby uzyskać następującą strukturę folderów:

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

Ale dostaję np. ta nazwa to ${shortName}-business jako folder. Bez bycia zastąpionym przez nieruchomość.

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

Jak mogę to osiągnąć? A jak mogę umieścić pliki poniżej soq-business? Nie znając w tym momencie nazwy folderu?

Odpowiedz

17

Pomyślałem dokładnie ten sam problem dzisiaj ...

znalazłem jakiś wpis na blogu Adama Leggett który opisuje stosowanie zastępczych w ścieżkach: spojrzeć na https://mikeciblogs.wordpress.com/2010/01/14/working-with-custom-maven-archetypes-part-1/ (krok 4).

Podstępem wydaje się być użycie podwójnych podkreśleń zamiast składni nawiasów klamrowych, dzięki czemu ${shortName} stanie się __shortName__.

Jednak nie próbowałem jeszcze rozwiązania. Jeśli to zrobisz, daj nam znać, jeśli to działa. Dzięki!

HTH!

+0

Dziękuję, działa to świetnie. – codevour

+0

Blog jest niedostępny. Może link jest zepsuty, może ktoś go zaktualizuje! –

+0

wszystkie potrzebne informacje znajdują się w samej odpowiedzi –

2

Jak podkreślił Vivian, mój blog zawiera wskazówki, jak to zrobić. Jedną z rzeczy, na którą należy zwrócić uwagę (co nie jest wyraźnie wymienione na blogu) jest to, że ta funkcja działa tylko z wtyczką archetypu 2.x

+1

Dziękujemy za te dodatkowe informacje. – codevour