天天看點

使用Maven Archetype建立Java項目模闆

使用Maven Archetype建立Java項目模闆

1.over view

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

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

2.do it

⚠️:我們将使用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來建立以該項目為基礎的模闆。

2.1 生成模闆檔案夾

執行以下maven指令:

mvn archetype:create-from-project

此時項目中會生成target/generated-sources/archetype檔案夾,其中存放的就是我們的模闆相關檔案。

2.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中的源檔案,可以看到如下:

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

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

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

如下為archetype-metadata.xml示例:

<?xml version="1.0" encoding="UTF-8"?>

<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。

2.3 生成模闆(原型)

我們進入target/generated-sources/archetype目錄,執行以下指令:

mvn install

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

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

我們使用以下指令:

mvn archetype:generate \

-DarchetypeCatalog=local \

-DgroupId=建立項目的groupId \

-DartifactId=建立項目的artifactId \

-DarchetypeGroupId=你的原型group \

-DarchetypeArtifactId=你的原型項目名字-archetype \

-DarchetypeVersion=你的原型版本 \

-DinteractiveMode=false

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

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

2.5 将模闆上傳至maven倉庫

我們進入target/generated-sources/archetype目錄,打開pom.xml

添加倉庫資訊:

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

随後指定如下指令:

mvn deploy

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

3.summary

本文我們介紹的maven的原型及其特性帶來的好處,并且我們示範了如何生成一個原型,并且利用原型來建立一個新項目。

原文位址

https://www.cnblogs.com/dongxishaonian/p/12706023.html