views:

238

answers:

2

I try to build an archetype structure like this, a webapp with some custom folders for our web-framework. Especially some dynamic folders which also will contain some files brought by the archetype.

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

I added a required property to my archetype-metadata.xml to have an short-name for the project, which is used among other things for generating unique folders.

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

The property shortName i use in a fileSet:

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

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

The command to generate the archetype:

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

I assume to get the following folder structure:

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

But i get e.g. this name ${shortName}-business as folder. Without beeing replaced with the property.

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

How can i achieve this? And how can i place files below soq-business? Without knowing the folder name at this time?

+2  A: 

I figured the exact same problem today...

I found some blog entry by Adam Leggett which describes using placeholders in paths: have a look at http://blogs.mikeci.com/2010/01/14/working-with-custom-maven-archetypes-part-1/ (Step 4).

The trick seems to be to use doubled underscores instead of the curly braces syntax, so ${shortName} becomes __shortName__.

However, I haven't tried the solution yet. If you do so, please let us know if it works. Thanks!

HTH!

Vivian Steller
Thank you, this works great.
codedevour
A: 

As Vivian has kindly pointed out, my blog entry provides some hints on how to do this. However, one thing to watch out for (which isn't explicitly mentioned in the blog) is that this feature only works with the archetype plugin 2.x

Adam Leggett
Thank you for this additional information.
codedevour