常用的Archetype
-
macen-archetype-quickstart
-
macen-archetype-webapp
编写Archetype
自定义archetype关键目录
-
pox.xml
Archetype自身的pox.xml -
src/main/resources/archetype-resources/pom.xml
基于该Archetyoe生成的项目的POM原形 -
src/main/resources/META-INF/maven/archetype-metadata.xml
Archetype的描述文件 -
src/mian/resources/archetype-resources/**
其他需要包含在Archetype中的内容
一个简单的Archetype
-
pom.xml
<?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"> <modelVersion>4.0.0</modelVersion> <groupId>com.vczyh.archetypes</groupId> <artifactId>archetype-test</artifactId> <version>1.0-SHAPSHOT</version> <packaging>jar</packaging> </project> 复制代码
-
src/main/resources/archetype-resources/pom.xml
<?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"> <modelVersion>4.0.0</modelVersion> <groupId>${groupId}</groupId> <artifactId>${artifactId}</artifactId> <version>${version}</version> <packaging>war</packaging> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> </dependencies> <build> <finalName>${artifactId}</finalName> </build> </project> 复制代码
-
src/main/resources/META-INF/maven/archetype-metadata.xml
<?xml version="1.0" encoding="UTF-8"?> <archetype-descriptor name="test"> </archetype-descriptor> 复制代码
-
根目录运行,项目会安装到本地仓库,至此,一个简单的Archetype已经完成了
mvn clean install 复制代码
-
使用Archetype,
groupId
,artifactId
,version
对应上面的pom.xmlmvn archetype:generate -DarchetypeGroupId="com.vczyh.archetypes" -DarchetypeArtifactId="archetype-test" -DarchetypeVersion="1.0-SHAPSHOT" 复制代码
生成的项目只有一个
pom.xml
,但也是一个Archetype
完善Archetype
-
通过修改
src/main/resources/archetype-resources/pom.xml
可以添加默认依赖以及其他信息 -
添加
src/main/java
src/main/resources
src/test/java
src/main/resources/application.properties
//App.java package ${package}; public class App { public static void main(String[] args) { System.out.println("Hello World!"); } } 复制代码
# application.properties # 使用${port}可以获取使用archetype时输入的参数port的值 port=${port} 复制代码
-
新建Archetype默认不会包含上面的目录,因此得修改
src/main/resources/META-INF/maven/archetype-metadata.xml
<?xml version="1.0" encoding="UTF-8"?> <archetype-descriptor name="test"> <fileSets> <!--fileSet对应一个目录以及该目录相关的包含或排除规则--> <!--filtered表示是否对该文件及合应用属性替换,像${x}这样的内容是否替换成命令行输入的x参数的值--> <!--packaged表示是否将该目录下的内容放到生成项目的包路径下--> <fileSet filtered="true" packaged="true"> <!--src/main/java对应archetype-resources/src/main/java--> <directory>src/main/java</directory> <!--只包含archetype-resources/src/main/java下的.java文件--> <include>**/*.java</include> </fileSet> <!--resources一般没有包路径,所以packaged设置为false--> <fileSet filtered="true" packaged="false"> <directory>src/main/resources</directory> <!--<include>**/*.properties</include>--> </fileSet> <fileSet filtered="true" packaged="true"> <directory>src/test/java</directory> <include>**/*.java</include> </fileSet> </fileSets> <requiredProperties> <!--使用archetype时候必须要求输入的参数,archetype中可以使用${port}获取--> <requiredProperty key="port"/> <requiredProperty key="groupId"> <!--可以设置默认值,使用archetype会使用默认值--> <defaultValue>com.vczyh</defaultValue> </requiredProperty> </requiredProperties> </archetype-descriptor> 复制代码
-
使用archetype创建项目
注意
application.properties
中的port
已经变成输入的值
生成本地仓库的Archetype Catalog
mvn archetype:crawl
复制代码
会扫描本地仓库,并且在${user}/.m2/repository
生成archetype-catalog.xml
,包含了遍历到的本地archetype,其中包含刚刚自定义的
<?xml version="1.0" encoding="UTF-8"?>
<archetype-catalog xsi:schemaLocation="http://maven.apache.org/plugins/maven-archetype-plugin/archetype-catalog/1.0.0 http://maven.apache.org/xsd/archetype-catalog-1.0.0.xsd"
xmlns="http://maven.apache.org/plugins/maven-archetype-plugin/archetype-catalog/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<archetypes>
<archetype>
<groupId>com.vczyh.archetypes</groupId>
<artifactId>archetype-test</artifactId>
<version>1.0-SHAPSHOT</version>
<description>test</description>
</archetype>
<archetype>
<groupId>org.apache.maven.archetypes</groupId>
<artifactId>maven-archetype-quickstart</artifactId>
<version>1.3</version>
<description>quickstart</description>
</archetype>
<archetype>
<groupId>org.apache.maven.archetypes</groupId>
<artifactId>maven-archetype-quickstart</artifactId>
<version>1.4</version>
<description>quickstart</description>
</archetype>
<archetype>
<groupId>org.apache.maven.archetypes</groupId>
<artifactId>maven-archetype-webapp</artifactId>
<version>1.4</version>
<description>webapp</description>
</archetype>
</archetypes>
</archetype-catalog>
复制代码
添加到Catalog的方便之处在于不用每次使用archetype时写一长串命令
mvn archetype:generate
复制代码
选择archetype的编号,比如这里的11即可
Idea使用Archetype
添加完成后使用
如果需要额外的参数,需要在这里添加,比如示例中的port
,否则创建失败