您的位置:首页 > 其它

maven创建自定义Archetype步骤

2015-03-08 18:48 232 查看
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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: