Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to create empty folders with maven archetype?

Tags:

There is an existing issue for this approach, located on Codehaus JIRA #ARCHETYPE-57, but all instructions listed in this ticket failed for me. Also the blog post of marekdec How to get maven archetype to generate empty directories fails for me.

The trick within the archetype.xml with the trailing / doesnt works for me:

<resources>   <resource>src/main/webapp/</resource> 

Unable to find resource 'archetype-resources/src/main/webapp/' 

Also the fileSet directory in archetype-metadata.xml does not work for me:

<fileSet filtered="true" encoding="UTF-8">  <directory>src/main/webapp/</directory> </fileSet> 

I use the following maven-archetype-plugin to create my custom archetype.

mvn org.apache.maven.plugins:maven-archetype-plugin:2.0-alpha-5:create 

Is there any other solution? Or did i miss something? Thanks

like image 686
Christopher Klewes Avatar asked May 07 '10 07:05

Christopher Klewes


People also ask

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 is the use of archetype in maven?

Archetype will help authors create Maven project templates for users, and provides users with the means to generate parameterized versions of those project templates. Using archetypes provides a great way to enable developers quickly in a way consistent with best practices employed by your project or organization.

What should be the archetype while creating maven project?

The official archetype (mentioned by Apache's Maven Getting Started Guide and by the Apache Maven Cookbook) for simple Java projects is maven-archetype-quickstart, or org. apache.


2 Answers

I did a quick test and... it worked for me. First, I created an archetype:

$ mvn archetype:generate -B -DarchetypeArtifactId=maven-archetype-archetype \                             -DgroupId=com.stackoverflow \                             -DartifactId=Q2786966 \                             -Dversion=1.0-SNAPSHOT \ 

I renamed the archetype.xml into archetype-metadata.xml (the former is for Archetype 1.0.X, the later is for Archetype 2.0.X) so the project looks like:

 $ tree . . ├── pom.xml └── src     └── main         └── resources             ├── archetype-resources             │   ├── pom.xml             │   └── src             │       ├── main             │       │   └── java             │       │       └── App.java             │       └── test             │           └── java             │               └── AppTest.java             └── META-INF                 └── maven                     └── archetype-metadata.xml 

And archetype-metadata.xml contains:

<?xml version="1.0" encoding="UTF-8"?> <archetype-descriptor name="Q2786966">   <fileSets>     <fileSet filtered="true" encoding="UTF-8">       <directory>src/main/webapp</directory>     </fileSet>     <fileSet filtered="true" packaged="true">       <directory>src/main/java</directory>       <includes>         <include>**/*.java</include>       </includes>     </fileSet>   </fileSets> </archetype-descriptor> 

Then I installed the archetype and used it to create a project:

$ mvn install $ cd ~/tmp $ mvn archetype:generate -B -DarchetypeGroupId=com.stackoverflow \                             -DarchetypeArtifactId=Q2786966 \                             -DarchetypeVersion=1.0-SNAPSHOT \                             -DgroupId=my.group \                             -DartifactId=my-artifact \                             -Dversion=1.0-SNAPSHOT 

And the resulting project looks like this:

 $ tree my-artifact/ my-artifact/ ├── pom.xml └── src     └── main         ├── java         │   └── my-group         │       └── App.java         └── webapp 

The empty webapp directory is there.

like image 81
Pascal Thivent Avatar answered Oct 01 '22 17:10

Pascal Thivent


I solved this issue by adding the following configuration to the archetypes pom.xml build configuration.

Assuming your archetype-metadata.xml configuration file's filesets is as follows:

<fileSet encoding="UTF-8">  <directory>src</directory>   <includes>    <include>**/**</include>   </includes> </fileSet> 

Add this to your pom.xml, not the one included with the archetype, the actual project pom.xml

<plugin>   <groupId>org.apache.maven.plugins</groupId>   <artifactId>maven-resources-plugin</artifactId>   <version>2.3</version>   <configuration>     <includeEmptyDirs>true</includeEmptyDirs>   </configuration> </plugin> 

The xml configuration line which does the magic is

<includeEmptyDirs>true</includeEmptyDirs> 

The full configuration will look as follows

<project ...> ...      <build>         <plugins>             <plugin>                 <groupId>org.apache.maven.plugins</groupId>                 <artifactId>maven-resources-plugin</artifactId>                 <version>2.3</version>                 <configuration>                     <includeEmptyDirs>true</includeEmptyDirs>                 </configuration>             </plugin>          </plugins>     </build>  </project> 
like image 32
isawk Avatar answered Oct 01 '22 16:10

isawk