介绍
Maven自身提供了许多Archetype来方便用户创建Project,但是每个团队都可能会有一些常用的文件或配置,为了避免在创建project时重复的拷贝和修改,我们通过自定义Archetype来规范显得还蛮有必要,下面简单介绍下使用maven-archetype-archetype来构建自己的Archetype的过程。
用来创建archetype的一个模板是**maven-archetype-archetype
$ mvn archetype:generate \-DarchetypeGroupId=<archetype-groupId> \-DarchetypeArtifactId=<archetype-artifactId> \-DarchetypeVersion=<archetype-version> \-DgroupId=<my.groupid> \-DartifactId=<my-artifactId>
例如:
$ mvn archetype:generate \-DgroupId=com.ultrapower.maven.archetypes \-DartifactId=springboot-maven-archetype \-DarchetypeArtifactId=maven-archetype-archetype \-DinteractiveMode=false \-X
生成后的项目
常用的maven archetype
如果只是一个模块,或者不需要web容器的支持,那就是maven-archetype-quickstart即可
如果是一个web工程,那可以用maven-archetype-webapp
自己写一个archetype
用eclipse提供的向导,常见一个maven工程,选择的archetype是maven-archetype-archetype,就是用来创建archetype的一个模板
熟悉archetype自己的pom.xml
创建一个maven工程,将其改造为archetype需要的格式
archetype自己也需要一个pom.xml,用来定位自己的坐标
<groupId>com.zhss.maven.archetypes</groupId><artifactId>maven-archetype-parent</artifactId><version>1.0.0</version>
要生成的项目的pom.xml
接着编写src/main/resources/archetype-resources/pom.xml,就是基于这个archetype生成的项目的pom.xml,里面要注意的是要用到一些占位符,因为生成项目的时候,groupId和artifactId之类的都是用户输入的,这个就是最终生成的项目的pom.xml文件。里面可以放入任何你需要的依赖和插件。
<groupId>${groupId}</groupId><artifactId>${artifactId}</artifactId><version>${version}</version><name>${artifactId}</name>
下面放入依赖、插件以及部署等通用的信息
定义archetype的元数据
接着要编写src/main/resources/META-INF/maven/archetype-metadata.xml
<?xml version=”1.0” encoding=”UTF-8”?><archetype-descriptor name=”parent”><fileSets><fileSet filtered=”true” packaged=”true”><directory>src/main/java</directory><includes><include>**/*.java</include></includes></fileSet><fileSet filtered=”true” packaged=”true”><directory>src/test/java</directory><includes><include>**/*.java</include></includes></fileSet><fileSet filtered=”true” packaged=”true”><directory>src/main/resources</directory><includes><include>**/*.properties</include></includes></fileSet></fileSets><requiredProperties><requiredProperty key=”port” /><requiredProperty key=”groupId”><defaultValue>com.zhss</defaultValue></requiredProperty></requiredProperties></archetype-descriptor>
这个文件两个作用
第一个作用是定义将这个archetype中的哪些java代码和测试代码以及资源文件,都包含到创建好的项目中去;
第二个作用是定义创建项目的时候需要输入的参数是什么
编写要给新项目的java代码、测试代码以及资源包和配置文件s
src/main/java之类的,对应的目录是src/main/resources/archetype-resources/src/main/java子目录中的代码,在这里可以写你要预先给好的代码
src/test/java,对应的目录是src/main/resources/archetype-resources/src/test/java子目录中的代码,就是你预先给好的测试代码
src/main/resources之类的,对应的目录是src/main/resources/archetype-resources/src/main/resources目录,在这里给好你预先包含的配置文件
filtered参数表示是否对文件启用占位符替换,packaged表示是否将文件放到包路径下。因为package是创建项目的时候必须输入的,就是你的包基础路径。一般是需要将代码放到包路径下的,而资源文件不需要放到包路径下。
默认情况下,会要求输入groupId,artifactId,version,package也可以自己额外定义要求输入的参数,都可以在资源文件或者代码中使用${}的占位符方式来引用
同时对于你写的一些基础的类,一般是可以用package占位符的,到时候创建出来就会替换package
比如说
package ${package}public class Application {}
部署arthcetype到私服
mvn clean deploy安装到本地仓库和私服,都可以使用了
用archetype创建一个工程
然后就可以用
$ mvn archetype:generate \-DarchetypeGroupId=com.zhss.archetypes \-DarchetypeArtifactId=archetype-oa \-DarchetypeVersion=1.0.0
然后会提示输入各种参数,就会生成一个项目
archetype catalog
也可以做到不需要输入archetype的坐标就可以使用,就是要将archetype加入一个archetype列表供用户选择,这个archetype列表就是在archetype-catalog.xml文件中。
maven默认会从几个地方去读取archetype-catalog.xml的内容:
- internal:maven-archetype-plugin内置了几十个archetype
- local:从~/.m2/archetype-catalog.xml读取,默认不存在,要自己创建
- remote:读取maven中央仓库的archetype-catalog.xml,大概有几百个archetype
- file:读取本机任何一个文件
- http:读取任何一个网络上的文件
默认maven会从local+remote去读取archetype列表供选择
可以用mvn archetype:crawl来自动化扫描本地仓库中的archetype,然后生成一份archetype-catalog.xml,放在~/.m2/目录下,但是一般不用这种方式。
除非呢你是要做一个开源的archetype,对不对,然后才去关注这个东西,或者是你写了一个archetype,要整合到eclipse里面去,这种都很麻烦,冷门的知识,我都不想讲。
pom.xml标签
<scm>和<issueManagement>相关的东西,是跟一个releases插件搭配使用,每次要发布一个版本的时候,有一个自动化做各种检查,以及更新版本号的一个插件,跟git仓库结合起来使用。<ciManagement>是跟jenkins持续集成结合起来讲解。 <site>这个一些开源项目比较常用,在公司里做项目很少说基于他的site去生成文档。

