Christopher Klewes
Christopher Klewes

Reputation: 11445

How do I create dynamically named folders with Maven Archetype?

I'm trying 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 this name ${shortName}-business as folder, without it being replaced with the property.

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

How can I achieve this? How can I place files below soq-business without knowing the folder name at this time?

Upvotes: 15

Views: 7833

Answers (2)

Vivian Steller
Vivian Steller

Reputation: 256

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 https://mikeciblogs.wordpress.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!

Upvotes: 24

Adam Leggett
Adam Leggett

Reputation: 51

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

Upvotes: 4

Related Questions