Reputation: 11445
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
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
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