An archetype is defined as an original pattern or model from which all other things of the same kind are made.
目录
2.通过IDE方式生成(使用本地install的archetype)
背景
开发中,我们通常会使用maven内置的脚手架也就是archetype来快速生成项目结构。但是在开发中,你会发现maven预先提供的archetyp远远不够,每次新建一个项目,我们都需要从现有的项目copy pom.xml,spring的配置文件,一些公共的工具类等,对于多module项目,我们还需要去创建各个module。在这样的背景下,我们就需要使用maven的archetype去定义一个自己想要的代码脚手架以供更快的生成新的项目骨架,可以进行后续开发。
创建archetype模板
手动创建
1.首先创建一个空的maven项目
2.创建archetype-metadata.xml,位于src/main/resources/META-INF/maven/目录下
<?xml version="1.0" encoding="UTF-8"?>
<archetype-descriptor xsi:schemaLocation="https://maven.apache.org/plugins/maven-archetype-plugin/archetype-descriptor/1.1.0 http://maven.apache.org/xsd/archetype-descriptor-1.1.0.xsd" name="ibu-itinerary-archetype"
xmlns="https://maven.apache.org/plugins/maven-archetype-plugin/archetype-descriptor/1.1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<!--属性变量定义-->
<requiredProperties>
<requiredProperty key="package">
<defaultValue>com.chenpp.archetype</defaultValue>
</requiredProperty>
</requiredProperties>
<!--项目子模块定义-->
<modules>
<module id="${rootArtifactId}-domain" dir="__rootArtifactId__-domain" name="${rootArtifactId}-domain">
<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}-dao" dir="__rootArtifactId__-dao" name="${rootArtifactId}-dao">
<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}-service" dir="__rootArtifactId__-service" name="${rootArtifactId}-service">
<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}-controller" dir="__rootArtifactId__-controller" name="${rootArtifactId}-controller">
<fileSets>
<fileSet filtered="true" packaged="true" encoding="UTF-8">
<directory>src/main/java</directory>
<includes>
<include>**/*.java</include>
</includes>
</fileSet>
</fileSets>
</module>
</modules>
</archetype-descriptor>
- requiredProperty:定义通过archetype生成项目时需要提供的参数,这些属性可以在资源元文件里的任意一个文件里通过${var}来引用,所以的元文件最终都可以选择通过velocity引擎来执行替换后生成。
默认的属性有:groupId,artifactId,packeage,version等 - module 定义子模块
1) id :定义子模块工程的artifactId
2) dir :定义子模块源文件在archetype-resources里对应的directory
3) name :定义子模块的名字 - fileSet:定义 通过Archetype插件生成的项目里的文件和脚手架jar里的文件的关联关系
1) packaged="true"标识directory中对应的内容是否要放入到package中,比如package为com.chenpp,那么如果该属性为true,则对应的java文件会放到com/chenpp文件夹下,也就是包路径下。
2) filtered="true"标识下面提到的${}是否要进行替换
3.创建对应的子模块下的pom.xml和java文件
以domain子模块为例
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>${rootArtifactId}</artifactId>
<groupId>${groupId}</groupId>
<version>${version}</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>${artifactId}</artifactId>
<dependencies>
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.6</version>
</dependency>
</dependencies>
</project>
package ${package}.entity;
public class User{
private String userName;
private String sex;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
}
整个项目的结构如下:
archetype项目写好之后,通过mvn clean install命令安装到本地的maven仓库中
通过已有的项目结构生成archetype
在项目的根目录下(即项目的pom.xml文件所在目录)下执行maven命令:
mvn archetype:create-from-project
这样就可以通过当前项目结构创建一个archetype骨架,生成的archetype的信息,默认是在project根目录下的 target\generated-sources\archetype 目录
然后在archetype的根目录下(即: 项目根目录\target\generated-sources\archetype
)执行mvn clean install命令就可以将archetype安装在本地仓库里了。
通过archetype创建新项目
1.通过maven命令的方式
前面的四个参数是生成的新项目的maven groupId以及package,后面三个参数指定使用的脚手架archetype
mvn archetype:generate -DgroupId=com.chenpp -DartifactId=supermarker-project -Dpackage=com.chenpp.market -Dversion=1.0 -DarchetypeGroupId=com.chenpp -DarchetypeArtifactId=archetype-project -DarchetypeVersion=1.0 -X -DarchetypeCatalog=local
archetypeCatalog用来指定maven-archetype-plugin读取archetype-catalog.xml文件的位置:
internal——maven-archetype-plugin内置的
local——本地的,位置为~/.m2/archetype-catalog.xml
remote——指向Maven中央仓库的Catalog
生成新的项目如下:
2.通过IDE方式生成(使用本地install的archetype)
使用本地的archetype jar来生成新项目