2011-07-16 17 views
5

Tôi đã tạo một nguyên mẫu sử dụng nguyên mẫu: create-from-project từ một dự án đa mô-đun.Làm cách nào để tạo nguyên mẫu của tôi từ một thư mục sử dụng dự án đa thức dựa trên artifactId?

Mẫu archetype-metadata.xml giống như dưới đây, những gì tôi muốn là "dir" có thể được sửa đổi khi tôi chạy mvn archetype: tạo bằng cách sử dụng archetypeId tôi cung cấp thay vì sử dụng một thư mục cố định. Điều đó có thể được thực hiện?

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

Đây là cấu trúc của nguyên mẫu:

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

Trả lời

11

Bạn cần phải sử dụng các placeholder rootArtifactId như:

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

Đổi tên thư mục module của bạn sử dụng tiền tố __rootArtifactId__.

Bạn có thể xem ví dụ về kiểu mẫu như vậy trong http://code.google.com/p/open-archetypes/source/browse/multi-javaee5-archetype/src/main/resources/META-INF/maven/archetype-metadata.xml

+0

+1, đã hoạt động, cảm ơn rất nhiều – Puce

Các vấn đề liên quan