天天看點

使用 Maven Archetype 建立 Java 項目模闆

使用 Maven Archetype 建立 Java 項目模闆

鏡像下載下傳、域名解析、時間同步請點選

阿裡巴巴開源鏡像站

一、概述

Archetype是一個Maven項目模闆工具包。原型被定義為一種原始的模式或模型,所有其他同類的東西都是從中産生的。當我們試圖提供一個提供生成Maven項目的一緻方法的系統時,這個名字就合适了。Archetype将幫助作者為使用者建立Maven項目模闆,并為使用者提供生成這些項目模闆的參數化版本的方法。

使用原型提供了一種很好的方法,可以與您的項目或組織所采用的最佳實踐一緻的方式快速地使開發人員受益。您可能希望在組織内部實作J2EE開發的标準化,是以您可能希望提供EJB,WAR或Web服務的原型。一旦建立了這些原型并将其部署在組織的存儲庫中,組織中的所有開發人員就可以使用它們。

二、操作步驟

我們将使用springboot項目來示範如何生成一個maven archetype(原型),本文中(模闆)(原型)交替使用,二者意思相同。

我們有一個現成的示例項目,其結構如下:

.
├── Dockerfile
├── README.md
├── last-demo.iml
├── mvnw
├── mvnw.cmd
├── pom.xml
├── src
    ├── main
    │   ├── java
    │   │   └── com
    │   │       └── demo
    │   │           └── data
    │   │               ├── Application.java
    │   │               └── your_business_package
    │   │                   ├── client
    │   │                   │   └── DemoClient.java
    │   │                   ├── constants
    │   │                   │   └── YourBusinessConstants.java
    │   │                   ├── enumerate
    │   │                   │   └── DemoStatus.java
    │   │                   ├── presistence
    │   │                   │   ├── DemoRepository.java
    │   │                   │   └── entity
    │   │                   │       └── DemoDO.java
    │   │                   ├── service
    │   │                   │   └── DemoService.java
    │   │                   └── web
    │   │                       ├── dto
    │   │                       │   └── DemoDTO.java
    │   │                       └── rest
    │   │                           └── DemoController.java
    │   └── resources
    │       ├── application.yml
    │       └── logback-spring.xml
    └── test
        ├── java
        │   └── com
        │       └── demo
        │           └── data
        │               └── ApplicationTests.java
        └── resources
            └── application.yml           

接下來我們将使用maven archetype來建立以該項目為基礎的模闆。

1. 生成模闆檔案夾

執行以下maven指令:

mvn archetype:create-from-project           

此時項目中會生成

target/generated-sources/archetype

檔案夾,其中存放的就是我們的模闆相關檔案。

2. 自定義模闆

探索

target/generated-sources/archetype

我們可以得知:

generated-sources
    └── archetype
        ├── pom.xml
        ├── src
        │   ├── main
        │   │   └── resources
        │   │       ├── META-INF
        │   │       │   └── maven
        │   │       │       └── archetype-metadata.xml ##⚠️原型描述符,描述了我們原型的結構
        │   │       └── archetype-resources ##⚠️經過maven轉換後的項目檔案包
        │   └── test
        │       └── resources
        │           └── projects
        │               └── basic
        └── target
            ├── classes
            │   └── archetype-resources
            ├── your_project_name.jar
            └── test-classes
                └── projects
                    └── basic           

我們随機打開一個archetype-resources中的源檔案,可以看到如下:

使用 Maven Archetype 建立 Java 項目模闆

上圖中我們看到的${package}占位符,這個就是maven原型插件自動處理的結果,到時候我們根據原型生成項目的時候,這些占位符就會變成我們新生成項目的相關的值。類似,maven還提供了groupId,artifactId, version等關鍵字。如果我們項目中有其他地方也需要這種定制化,我們可以手動進行更改。

例如我們把項目配置檔案改為如下(應用名用占位符代替),目的是實作項目的名稱随建立的項目變動。

使用 Maven Archetype 建立 Java 項目模闆

接下來來分析

archetype-metadata.xml

,他是原型描述符号,我們可以指定那些檔案進入原型裡,那些檔案需要排除,還能指定上面說的占位符需不需要被替換 等等。

如下為

archetype-metadata.xml

示例:

<?xml version="1.0" encoding="UTF-8"?>
<archetype-descriptor xsi:schemaLocation="https://maven.apache.org/plugins/maven-archetype-plugin/archetype-descriptor/1.1.0">
  <fileSets>
    <fileSet filtered="true" packaged="true" encoding="UTF-8">
      <directory>src/main/java</directory>
      <includes>
        <include>**/*.java</include>
      </includes>
    </fileSet>
    <fileSet filtered="true" encoding="UTF-8">
      <directory>src/main/resources</directory>
      <includes>
        <include>**/*.xml</include>
      </includes>
    </fileSet>
    <fileSet filtered="true" encoding="UTF-8">
      <directory>src/main/resources</directory>
      <includes>
        <include>**/*.yml</include>
      </includes>
    </fileSet>
    <!--下面還有更多項-->           

說明:

fileSet 屬性标簽指定的那些檔案需要納入原型中,我們把不需要的删掉。

filtered 屬性标簽表示是否替換檔案中的占位符,若為true則會替換,否則不會,是以我們如果想要占位符最後會被替換為項目相關的資訊,還需要通過這個标簽指定。

packaged 屬性标簽指定檔案是否在項目的包裡面,true或false。

3. 生成模闆(原型)

我們進入

target/generated-sources/archetype

目錄,執行以下指令:

mvn install           

此時模闆将在我們本地生成。

4. 使用模闆(原型)生成新項目

我們使用以下指令:

mvn archetype:generate  \
-DarchetypeCatalog=local \
-DgroupId=建立項目的groupId \
-DartifactId=建立項目的artifactId \
-DarchetypeGroupId=你的原型group \
-DarchetypeArtifactId=你的原型項目名字-archetype \
-DarchetypeVersion=你的原型版本 \
-DinteractiveMode=false           

之後,我們會生成新項目。項目的結構符合我們的原型結構。檢視我們手動指定的

application.yml

使用 Maven Archetype 建立 Java 項目模闆

此時,可以看到我們的占位符已經被我們項目的相關資訊給替換了。

5. 将模闆上傳至maven倉庫

target/generated-sources/archetype

目錄,打開

pom.xml

添加倉庫資訊:

<distributionManagement>
    <repository>
        <id>my-releases</id>
        <url>你的倉庫位址</url>
    </repository>
    <snapshotRepository>
        <id>my-snapshots</id>
        <url>你的倉庫位址</url>
    </snapshotRepository>
</distributionManagement>           
<servers>
    <server>
        <id>my-snapshots</id>
        <username>對應倉庫的username</username>
        <password>對應倉庫的password</password>
    </server>
    <server>
        <id>my-releases</id>
        <username>對應倉庫的username</username>
        <password>對應倉庫的password</password>
    </server>
</servers>           

然後指定如下指令:

mvn deploy           

随後,原型将被上傳至你的mavne倉庫。

提供全面,高效和穩定的鏡像下載下傳服務。釘釘搜尋 ' 21746399 ‘ 加入鏡像站官方使用者交流群。”