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?
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!