maven创建自定义Archetype步骤

Archetype是用于创建项目的骨架(或者模板),通过Archetype我们可以创建类似的Maven工程,同时Archetype能够极大的简化我们创建一个工程的步骤和流程。这里我将介绍自定义Maven的工程模板Archetype的方法和流程,这里采用的方法是从现有工程创建工程模板。

关于Archetype介绍参考:Introduction to Archetypes 

一、Archetype自定义流程:

1、创建模板工程:找到一个现有的项目,进行编辑,将项目中的包结构、各类文件放置到合适的位置;

2、从模板工程创建Archetype:打开cmd窗口,切换当前目录到上面的工程目录下,执行maven命令:

mvn archetype:create-from-project

执行完成后,target/generated-sourced/archetype目录下就是我们需要的项目模板。

3、安装Archetype到本地仓库cd进入target/generated-sourced/archetype中,执行命令:

mvn -Dmaven.test.skip=true clean install

将自定义Archetype安装到本地仓库即可:此时,自定义archetype就被安装到settings.xml<localRepository>指定的本地仓库中,我的机器本地目录是D:/q/repos-maven;另外,archetype安装到本地仓库后,会在.m2/archetype-catalog.xml中加入对应的archetype节点,结构如下:

<archetype>

      <groupId>com.xxxx.yyyy</groupId>

      <artifactId>crm-archetype-archetype</artifactId>

      <version>1.0.0</version>

      <description>The parent pom of crm</description>

    </archetype>

 

4、使用自定义Archetype创建工程:

这样我们就创建成功了自定义的Archetype,可以通过命令从本地模板创建工程:

mvn archetype:generate -DarchetypeCatalog=local

以上就是创建自定义Archetype的简单流程。

 

如果以上自动生成的Archetype包含了一些不必要的文件,则可以继续对工程进行编辑,并且修改工程描述文件:/target/generated-sources/archetype/target/classes/META-INF/maven/archetype-metadata.xml

二、模板工程描述文件自定义

如果希望继续自定义,可以在一中执行了mvn archetype:create-from-project命令后,生成的目录中,编辑archetype-metadata.xml,删除无用文件等,然后在mvn install安装到本地目录。archetype-metadata.xml保存在:/target/generated-sources/archetype/target/classes/META-INF/maven/archetype-metadata.xml,该文件主要用于描述需要生成的工程的结构和文件等,其描述规则参考Maven官方文档:ArchetypeDescriptor

 

如下是我的工程定义描述:

 

<?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="crm-360-evalution"
    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}-common" dir="__rootArtifactId__-common" name="${rootArtifactId}-common">
      <fileSets>
        <fileSet filtered="true" encoding="UTF-8">
          <directory>src/main/java</directory>
          <includes>
            <include></include>
          </includes>
        </fileSet>
      </fileSets>
    </module>
    <module id="${rootArtifactId}-model" dir="__rootArtifactId__-model" name="${rootArtifactId}-model">
      ……
    </module>
    <module id="${rootArtifactId}-dao" dir="__rootArtifactId__-dao" name="${rootArtifactId}-dao">
      <fileSets>
        <fileSet filtered="true" encoding="UTF-8">
          <directory>src/main/java</directory>
          <includes>
            <include></include>
          </includes>
        </fileSet>
        <fileSet encoding="UTF-8">
          <directory>src/resources</directory>
          <includes>
            <include>**/*.xml</include>
            <include>**/*.properties</include>
          </includes>
        </fileSet>
      </fileSets>
    </module>
    <module id="${rootArtifactId}-service" dir="__rootArtifactId__-service" name="${rootArtifactId}-service">
      ……
    </module>
    <module id="${rootArtifactId}-main" dir="__rootArtifactId__-main" name="${rootArtifactId}-main">
      <fileSets>
      <fileSet filtered="true" encoding="UTF-8">
          <directory>src/main/java</directory>
          <includes>
            <include></include>
          </includes>
        </fileSet>
        <fileSet filtered="true" encoding="UTF-8">
          <directory>src/main/webapp</directory>
          <includes>
            <include>**/*.vm</include>
            <include>**/*.jsp</include>
            <include>**/*.xml</include>
            <include>**/*.html</include>
          </includes>
        </fileSet>
        <fileSet filtered="true" encoding="UTF-8">
          <directory>src/main/resources</directory>
          <includes>
            <include>**/*.xml</include>
            <include>**/*.properties</include>
          </includes>
        </fileSet>
        <fileSet filtered="true" encoding="UTF-8">
          <directory>src/main/profiles</directory>
          <includes>
            <include>**/*.xml</include>
            <include>**/*.properties</include>
          </includes>
        </fileSet>
      </fileSets>
    </module>
  </modules>
</archetype-descriptor>

1、属性变量定义

${rootArtifactId}在创建新的工程时,会根据定义的新工程的artifactId进行替换,将${rootArtifactId}替换为artifactId。

2、项目子模块定义

属于可选部分,在定义父子工程的时候才需要,描述了多个工程中包含的不同目录和文件。module主要由以下属性:

id:相当于工程的artifactId.
dir:相当于工程源文件在archetype-resources里对应的directory.
name:模块的名字.

<modules>
    <module id="${rootArtifactId}-model" dir="__rootArtifactId__-model" name="${rootArtifactId}-model">
     ……
    </module>
    <module id="${rootArtifactId}-dao" dir="__rootArtifactId__-dao" name="${rootArtifactId}-dao">
      ……
    </module>
<modules>

3、文件集定义

fileSets:包含的文件集;

fileSet:包含的文件;

director:目录;

includes:包含的具体文件或者文件类型;

      <fileSets>
        <fileSet filtered="true" encoding="UTF-8">
          <directory>src/main/java</directory>
          <includes>
            <include></include>
          </includes>
        </fileSet>
      </fileSets>

 

posted @ 2015-03-08 18:48  youyiyuntian  阅读(739)  评论(0编辑  收藏  举报