java maven自定义模板搭建项目

1.背景

使用eclipse/ideal 均可以经过向导建立maven 工程,其支持的模板成百上千,虽然比较强大,可是每当看到那些眼花缭乱的模板,都有种不知所错的感受,何况这些模板,和公司的规范可能差异很大,生成项目后,还须要花费大量的时间去修改,而现实中,公司的项目都遵循必定的规范,若是可以自定义本身的模板,那么必然可以提升开发效率并减小出错的概率。html

2. maven-archetype-plugin

此插件可以帮助咱们自定义项目模板,它不只支持交互式建立项目,还支持一键建立项目,它既支持建立单个项目模板,还可以支持同时建立多个项目的模板。java

2.1 建立单个项目的模板

单项目建立 包含以下几步:apache

mvn archetype:create-from-project

cd target/generated-sources/archetype

mvn install

mvn archetype:generate -DarchetypeCatalog=local

2.2 建立包含多个module的项目模板。

多项目建立,其基本步骤同上,可是若是想增长个性化的需求,那么须要深刻了解其高级特性.eclipse

2.2.1 模板的目录结构

运行mvn archetype:create-from-project,${basedir}/target/generate-sources/目录下会生成模板项目,结构以下:maven

$ tree
.
|____pom.xml
|____src
| |____main
| | |____resources
| | | |____archetype-resources
| | | | |____pom.xml
| | | | |____src
| | | | | |____main
| | | | | | |____java
| | | | | | | |______packageInPathFormat__
| | | | | | | | |____Sample.java
| | | | | |____test
| | | | | | |____java
| | | | | | | |______packageInPathFormat__
| | | | | | | | |____SampleTest.java
| | | |____META-INF
| | | | |____maven
| | | | | |____archetype-metadata.xml
    1. pom.xml: 项目模板的pom,通常无需修改。
    1. src/main/resources/archetype-resources: maven根据此目录下的文件生成项目,此位置的文件将被拷贝或者过滤到待生成的项目中。
    1. src/main/resources/archetype-resources/pom.xml: 生成项目的最外层pom结构。
    1. src/main/resources/META-INF/maven/archetype-metadata.xml: 生成项目的配置文件,其中能够自定义项目复制或过滤文件,设置交互变量以及子模块生成的方式。详细说明
    1. 当咱们修改模板配置时,要使更改配置的模板项目当即生效,须要运行mvn clean install。

2.3 子模块名称修改

通常状况下,mvn archetype:create-from-project生成的模板不够灵活,此模板生成的项目,其子模块名称不可以更改,不然在生成项目的过程当中,会出现找不到模板目录的问题。archetype-metadata.xml module标签中惟一可用的变量是:rootArtifactId, 借助它能够实现子模块名称的部分修改。module中dir 若是须要引入变量,变量名先后必须有两个下划线,当子模块须要自定义模块名称时,须要借助这个变量,也就是子模块和父模块名称中必须存在一段相同的字符。当且仅当子模块的名称中包含__rootArtifactId__才可以实现自定义子模块名称。ide

example-archetype
├── pom.xml
└── src
    ├── main
       └── resources
           ├── META-INF
           │   └── maven
           │       └── archetype-metadata.xml
           └── archetype-resources
               ├── __rootArtifactId__-module1
               │   ├── pom.xml
               │   └── src
               │       ├── main
               │       │   ├── java
               │       │   └── resources
               │       └── test
               │           └── java
               │           └── resources
               ├── __rootArtifactId__-module2
               │   ├── pom.xml
               │   └── src
               │       ├── main
               │       │   ├── java
               │       │   └── resources
               │       └── test
               │           └── java
               │           └── resources
               └── pom.xml

2.4 默认值设置

<requiredProperties>
     <requiredProperty key="groupId">
       <defaultValue>com.company</defaultValue>
     </requiredProperty>
     <requiredProperty key="artifactId">
       <defaultValue>test-sample</defaultValue>
     </requiredProperty>
     <requiredProperty key="version">
       <defaultValue>1.0.0-SNAPSHOT</defaultValue>
     </requiredProperty>
     <requiredProperty key="package">
       <defaultValue>com.company.xx</defaultValue>
     </requiredProperty>
</requiredProperties>

这些原本须要手动输入赋值的变量,能够直接使用默认值进行替换,实现一键生成项目的做用,在设置默认值的时候须要同时配置在/src/main/resources/META-INF/maven/archetype-metadata.xml和/src/test/resources/projects/basic/archetype.properties中。ui

2.5 自定义packageName

咱们使用mvn archetype:create-from-project 生成的模板项目中,package名称可能不是咱们想要的,此时须要自定义package名称,可使用:mvn archetype:create-from-project -DpackageName=com.company.xxxxxx 实现手动package截取,具体请点击idea

2.6 使用

2.6.1 本机运行

在${basedir}/target/generated-sources/archetype/目录下 运行mvn install 会在~/.m2/目录下生产archetype-catalog.xml,这里面定义了本机全部自定义模板插件

<?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.dianping</groupId>
      <artifactId>sample-archetype</artifactId>
      <version>1.0.0.0-SNAPSHOT</version>
      <description>sample-archetype</description>
    </archetype>
  </archetypes>
</archetype-catalog>

在控制台任意目录中运行以下命令,便可建立新项目code

mvn archetype:generate 
        -DarchetypeArtifactId=sample-archetype 
        -DarchetypeGroupId=com.dianping 
        -DarchetypeVersion=1.0.0.0-SNAPSHOT 
        -DgroupId=com.dianping 
        -DartifactId=wed-sample 
        -DarchetypeCatalog=local 
        -Dpackage=com.dianping.wed.demo

2.6.2 远程部署

在${basedir}/target/generated-sources/archetype/目录下运行mvn deploy 发布到私有远程仓库 ,而后运行以下命令,便可快速新建项目.

mvn archetype:generate 
        -DarchetypeArtifactId=sample-archetype 
        -DarchetypeGroupId=com.dianping 
        -DarchetypeVersion=1.0.0.0-SNAPSHOT 
        -DgroupId=com.dianping 
        -DartifactId=wed-sample 
        -DarchetypeCatalog=internal,remote 
        -Dpackage=com.dianping.wed.demo

3 总结

此插件包含的goal不少,每一个goal包含的参数也较为繁多,功能很是强大,掌握它的使用,只须要维护有限的几份项目模板,就可以快速开发出功能强大、且很是灵活的项目骨架。

4 参考文档

相关文章
相关标签/搜索