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?
Using the Archetype to Bootstrap Projects Faster The users of our Maven Archetype just need to specify the correct groupId and artifactId , that's all. The source code for this Maven Archetype is available on GitHub.
A Maven archetype is an abstraction of a kind of a project that can be instantiated into a concrete customized Maven project. In short, it's a template project template from which other projects are created.
If you want a web application, use maven-archetype-webapp, or if you want a simple application use maven-archetype-quickstart.
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!
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With