Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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?

like image 277
Christopher Klewes Avatar asked May 10 '10 12:05

Christopher Klewes


People also ask

What do we need to specify while creating a project using archetype?

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.

What is archetype generate in maven?

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.

What archetype should I use for maven?

If you want a web application, use maven-archetype-webapp, or if you want a simple application use maven-archetype-quickstart.


2 Answers

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!

like image 133
Vivian Steller Avatar answered Oct 08 '22 08:10

Vivian Steller


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

like image 4
Adam Leggett Avatar answered Oct 08 '22 08:10

Adam Leggett