2011-07-16 26 views
5

我已經使用archetype創建了一個原型:create-from-project out of multi module project。如何從多模塊項目中使用基於artifactId的目錄來創建我的原型?

archetype-metadata.xml如下所示,我想要的是當我運行mvn archetype時可以修改「dir」:通過使用archetypeId生成,而不是使用固定目錄。可以這樣做嗎?

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

這是原型的結構:

├── 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 

回答

11

您需要使用rootArtifactId佔位符,如:

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

使用重命名你的模塊文件夾__rootArtifactId__前綴。

你可以看到http://code.google.com/p/open-archetypes/source/browse/multi-javaee5-archetype/src/main/resources/META-INF/maven/archetype-metadata.xml

+0

+1的這種原型的例子,即工作,非常感謝 – Puce

相關問題