2011-07-16 9 views
5

He creado un arquetipo utilizando arquetipo: crear-desde-proyecto a partir de un proyecto de varios módulos.¿Cómo puedo hacer que mi arquetipo de un proyecto multimodular utilice directorios basados ​​en el artifactId?

El archetype-metadata.xml es como a continuación, lo que me gustaría es que el "dir" se pueda modificar cuando ejecuto mvn archetype: generate usando el archetypeId que proporciono en lugar de usar un dir fijo. ¿Se puede hacer eso?

<?xml version="1.0" encoding="UTF-8"?> 
<archetype-descriptor xsi:schemaLocation="http://maven.apache.org/plugins/maven-archetype-plugin/archetype-descriptor/1.0.0 http://maven.apache.org/xsd/archetype-descriptor-1.0.0.xsd" name="service-parent" 
    xmlns="http://maven.apache.org/plugins/maven-archetype-plugin/archetype-descriptor/1.0.0" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <modules> 
    <module id="service-def" dir="service-def" name="service-def"> 
     <fileSets> 
     <fileSet filtered="true" packaged="true" encoding="UTF-8"> 
      <directory>src/main/java</directory> 
      <includes> 
      <include>**/*.java</include> 
      </includes> 
     </fileSet> 
     </fileSets> 
    </module> 
    <module id="service" dir="service" name="service"> 
     <fileSets> 
     <fileSet filtered="true" packaged="true" encoding="UTF-8"> 
      <directory>src/main/java</directory> 
      <includes> 
      <include>**/*.java</include> 
      </includes> 
     </fileSet> 
     <fileSet filtered="true" packaged="true" encoding="UTF-8"> 
      <directory>src/test/java</directory> 
      <includes> 
      <include>**/*.java</include> 
      </includes> 
     </fileSet> 
     <fileSet filtered="true" encoding="UTF-8"> 
      <directory>src/test/resources</directory> 
      <includes> 
      <include>**/*.xml</include> 
      <include>**/*.properties</include> 
      </includes> 
     </fileSet> 
     <fileSet encoding="UTF-8"> 
      <directory>src/test/resources</directory> 
      <includes> 
      <include>**/*.sql</include> 
      <include>**/*.dtd</include> 
      </includes> 
     </fileSet> 
     </fileSets> 
    </module> 
    <module id="service-web" dir="service-web" name="service-web"> 
     <fileSets> 
     <fileSet filtered="true" encoding="UTF-8"> 
      <directory>src/main/webapp</directory> 
      <includes> 
      <include>**/*.xml</include> 
      </includes> 
     </fileSet> 
     <fileSet filtered="true" encoding="UTF-8"> 
      <directory>src/main/resources</directory> 
      <includes> 
      <include>**/*.xml</include> 
      </includes> 
     </fileSet> 
     </fileSets> 
    </module> 
    </modules> 
</archetype-descriptor> 

Esta es la estructura del arquetipo:

├── pom.xml 
└── src 
    ├── main 
    │   └── resources 
    │    ├── archetype-resources 
    │    │   ├── pom.xml 
    │    │   ├── service 
    │    │   │   ├── pom.xml 
    │    │   │   └── src 
    │    │   │    ├── main 
    │    │   │    │   └── java 
    │    │   │    └── test 
    │    │   │     ├── java 
    │    │   │     └── resources 
    │    │   ├── service-def 
    │    │   │   ├── pom.xml 
    │    │   │   └── src 
    │    │   │    └── main 
    │    │   │     └── java 
    │    │   └── service-web 
    │    │    ├── pom.xml 
    │    │    └── src 
    │    │     └── main 
    │    │      ├── resources 
    │    │      │   ├── dao-context.xml 
    │    │      │   ├── hibernate.cfg.xml 
    │    │      │   └── single-context.xml 
    │    │      └── webapp 
    │    │       └── WEB-INF 
    │    │        ├── jboss-web.xml 
    │    │        ├── remoting-servlet.xml 
    │    │        └── web.xml 
    │    └── META-INF 
    │     └── maven 
    │      └── archetype-metadata.xml 
    └── test 
     └── resources 
      └── projects 
       └── basic 
        ├── archetype.properties 
        └── goal.txt 

Respuesta

11

Es necesario utilizar el marcador de posición rootArtifactId tales como:

<?xml version="1.0" encoding="UTF-8"?> 
<archetype-descriptor xsi:schemaLocation="http://maven.apache.org/plugins/maven-archetype-plugin/archetype-descriptor/1.0.0 http://maven.apache.org/xsd/archetype-descriptor-1.0.0.xsd" name="service-parent" 
xmlns="http://maven.apache.org/plugins/maven-archetype-plugin/archetype-descriptor/1.0.0" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
<modules> 
    <module id="${rootArtifactId}-def" dir="__rootArtifactId__-def" name="${rootArtifactId}-def"> 
    <fileSets> 
     <fileSet filtered="true" packaged="true" encoding="UTF-8"> 
     <directory>src/main/java</directory> 
     <includes> 
      <include>**/*.java</include> 
     </includes> 
     </fileSet> 
    </fileSets> 
    </module> 
    <module id="${rootArtifactId}" dir="__rootArtifactId__" name="${rootArtifactId}"> 
    <fileSets> 
     <fileSet filtered="true" packaged="true" encoding="UTF-8"> 
     <directory>src/main/java</directory> 
     <includes> 
     <include>**/*.java</include> 
     </includes> 
    </fileSet> 
    <fileSet filtered="true" packaged="true" encoding="UTF-8"> 
     <directory>src/test/java</directory> 
     <includes> 
     <include>**/*.java</include> 
     </includes> 
    </fileSet> 
    <fileSet filtered="true" encoding="UTF-8"> 
     <directory>src/test/resources</directory> 
     <includes> 
     <include>**/*.xml</include> 
     <include>**/*.properties</include> 
     </includes> 
    </fileSet> 
    <fileSet encoding="UTF-8"> 
     <directory>src/test/resources</directory> 
     <includes> 
      <include>**/*.sql</include> 
      <include>**/*.dtd</include> 
     </includes> 
     </fileSet> 
    </fileSets> 
    </module> 
    <module id="${rootArtifactId}-web" dir="__rootArtifactId__-web" name="${rootArtifactId}-web"> 
    <fileSets> 
     <fileSet filtered="true" encoding="UTF-8"> 
     <directory>src/main/webapp</directory> 
     <includes> 
      <include>**/*.xml</include> 
     </includes> 
     </fileSet> 
     <fileSet filtered="true" encoding="UTF-8"> 
     <directory>src/main/resources</directory> 
      <includes> 
      <include>**/*.xml</include> 
     </includes> 
     </fileSet> 
    </fileSets> 
    </module> 
</modules> 

cambiar los nombres de las carpetas del módulo usando el prefijo __rootArtifactId__.

Se puede ver un ejemplo de tal arquetipo en http://code.google.com/p/open-archetypes/source/browse/multi-javaee5-archetype/src/main/resources/META-INF/maven/archetype-metadata.xml

+0

1, que funcionaba, muchas gracias – Puce

Cuestiones relacionadas