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 參考文檔

相關文章
相關標籤/搜索