一.archetype
archetype我们可以理解为通过maven创建的项目模板.
1.我们先看看一个普通的项目架构长什么样子:
.
├── pom.xml
└── src
└── main
├── java
│ └── cn
│ └── com
│ ├── HelloWorld.java
│ └── been
│ └── User.java
└── resources
2.这只是一个最简单的项目骨架,现在我们通过maven的archetype功能来实现自动创建这样的项目骨架.
.
├── pom.xml
└── src
└── main
└── resources
├── META-INF
│ └── maven
│ └── archetype-metadata.xml
└── archetype-resources
├── pom.xml
└── src
└── main
└── java
├── HelloWorld.java
└── been
└── User.java
首先我们的archetype也需要一个pom.xml文件内容很简单:
//这是archetype骨架的pom.xml文件,定义了当前archetype
<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>cn.com</groupId>
<artifactId>my-test-archetype</artifactId>
<name>test-archetype</name>
<description>this is my test -archetype</description>
<version>1.0.0-SNAPSHOT</version>
</project>
我们的主要内容都在src/main/resources目录下:
先来看看archetype-resources目录:
这个目录下定义了我们以后实际会创建的项目内容: 这里需要注意的是src/main之后没有package目录(也就是最上面普通项目骨架中的cn/com目录),这其实我们在后面会做定义,我们来看看里面的User.java
package ${package}.been;
public class User{
private String name;
public void setName(String name){
this.name=name;
}
public String getName(){
return name;
}
}
以及pom.xml文件:
//这是archetype-resources下的pom.xml文件,会被复制成为实际项目的pom.xml
//这里使用了许多的${x}参数,这将在创建项目时指定这些参数值
<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>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>${artifactId}</name>
<url>http://www.realyue.online</url>
</project>
接下来就是最主要的archetype-metadata.xml了
<?xml version="1.0" encoding="UTF-8" ?>
<archetype-descriptor name="my-test-archetype">
<fileSets>
//filtered表示是否对形如${x}这样的参数进行替换
//packaged表示是否将该目录下的内容放入到生成项目的包路径下(像resource这样的资源就不需要)
<fileSet filtered="true" packaged="true">
<includes>
<directory>src/main/java</directory>
//**表示任意路径*表示任意字符
<include>**/*.java</include>
//也可以排除一些文件
//<excludes>
// <exclude></exclude>
//</excludes>
</includes>
</fileSet>
</fileSets>
<requiredProperties>
<requiredProperty key="version">
<defaultValue>1.0.0-SNAPSHOT</defaultValue>
</requiredProperty>
</archetype-descriptor>
好了现在我们写好了我们的archetype,接下来我们需要安装到我们的仓库中(默认路径为:~/.m2/repository)
mvn clean install
安装好之后我们怎么样才能使用呢?
//local,remote,internal
mvn archetype:generate -Drepository=local
使用这个命令会从本地仓库寻找archetype-catalog.xml文件.我们现在有了archetype,所以我们现在需要生成这么一个archetype-catalog.xml文件,通过使用:
mvn archetype:crawl -Drepository=~/.m2/repository -Dcatalog=repository/archetype-catalog.xml
这样就在~/.m2/repository下生成了一个archetype-catalog.xml(quickstart是默认生成的)
<?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>cn.com</groupId>
<artifactId>my-test-archetype</artifactId>
<version>1.0.0-SNAPSHOT</version>
<description>my-test-archetype</description>
</archetype>
<archetype>
<groupId>org.apache.maven.archetypes</groupId>
<artifactId>maven-archetype-quickstart</artifactId>
<version>1.3</version>
<description>quickstart</description>
</archetype>
</archetypes>
</archetype-catalog>
这样当我们创建项目的时候就会出现archetype列表,里面就包含了我们创建的archetype了。