溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何自定義archetype

發(fā)布時(shí)間:2021-11-17 10:44:43 來(lái)源:億速云 閱讀:182 作者:小新 欄目:大數(shù)據(jù)

這篇文章主要介紹了如何自定義archetype,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

雖然maven已經(jīng)提供了maven-archetype-webapp、maven-archetype-quickstart等項(xiàng)目骨架幫助我們快速構(gòu)建項(xiàng)目架構(gòu),但是默認(rèn)提供的archetype初始化的項(xiàng)目架構(gòu)并不能滿足開(kāi)發(fā)需求,這時(shí)候就有必要自己寫一個(gè)滿足項(xiàng)目需求的archetype了

使用自定義archrtype生成的項(xiàng)目結(jié)構(gòu)圖

為了激發(fā)閱讀興趣,先放一張使用自定義archetype生成項(xiàng)目的項(xiàng)目結(jié)構(gòu)圖 如何自定義archetype 基本上的類都是archetype生成的

archetype是什么

可以簡(jiǎn)單的理解為模板工具類,通過(guò)archetype我們可以快速的生成項(xiàng)目的基本架構(gòu)。比如我們使用idea創(chuàng)建一個(gè)maven web項(xiàng)目時(shí),常常會(huì)選擇maven-archetype-webapp模板來(lái)初始化項(xiàng)目,使用maven-archetype-webapp生成的項(xiàng)目中包括webapp目錄,里面包含web的配置文件 如何自定義archetype

archetype的組成

要想寫一個(gè)自定義archetype,首先得知道一個(gè)archetype的組成。archetype由四部分組成:

  • prototype files 原型文件
    位于src/main/resources/archetype-resource目錄下。prototype files 原型文件可以理解為多模塊中的子模塊或是單模塊工程中的源文件[即src文件]。這些原型文件在使用對(duì)應(yīng)archetype生成項(xiàng)目時(shí)被生成

  • archetype-metadata.xml
    位于src/main/resources/META-INF/maven/目錄下。該配置文件中主要列出了原型文件以及使用archetype生成模板工程需要的參數(shù)

  • prototype pom
    位于src/main/resources/archetype-resources目錄下。這個(gè)pom文件會(huì)出現(xiàn)在archetype創(chuàng)建的模板工程中,如果是單模塊工程,則是對(duì)整個(gè)項(xiàng)目的依賴管理;如果是多模塊工程,該pom是總pom文件,該文件中會(huì)定義項(xiàng)目的子模塊以及對(duì)子模塊的依賴進(jìn)行管理等,子模塊pom定義在子模塊下,子模塊pom文件只管理子模塊的依賴。

  • archetype pom
    位于自定義archetype工程的根目錄下。這是archetype工程項(xiàng)目的pom文件,里面一般沒(méi)什么東西,不會(huì)出現(xiàn)在archetype創(chuàng)建的模板工程中

superman[自定義archetype]結(jié)構(gòu)說(shuō)明

  • superman項(xiàng)目結(jié)構(gòu)圖 如何自定義archetype 包含了archetype的四個(gè)組成部分,兩個(gè)pom文件,一個(gè)archtype-metadata文件和五個(gè)原型文件[__rootArtifactId__-*],其中__rootArtifactId__在生成模板工程時(shí)會(huì)被傳入的值替代

  • archtype-metadata配置文件

    • 1.定義使用archetype生成模板工程需要傳入的參數(shù)

      <!--需要輸入的屬性-->
          <requiredProperties>
              <requiredProperty key="groupId">
                  <!--默認(rèn)的groupId-->
                  <defaultValue>com.h3t.test</defaultValue>
              </requiredProperty>
              <requiredProperty key="artifactId">
                  <!--默認(rèn)的artifactId-->
                  <defaultValue>demo</defaultValue>
              </requiredProperty>
              <requiredProperty key="package">
                  <!--默認(rèn)的包名和groupId一樣-->
                  <defaultValue>${groupId}</defaultValue>
              </requiredProperty>
          </requiredProperties>

      ${}標(biāo)識(shí)的變量都是通過(guò)maven中的命令行傳進(jìn)來(lái)的

    • 2.定義原型文件

          <module id="${rootArtifactId}-web" name="${rootArtifactId}-web" dir="__rootArtifactId__-web">
                  <fileSets>
                      <fileSet filtered="true" encoding="UTF-8" packaged="true">
                          <directory>src/main/java</directory>
                          <includes>
                              <include>**/*.*</include>
                          </includes>
                      </fileSet>
                      <fileSet filtered="true" encoding="UTF-8" packaged="true">
                          <directory>src/test/java</directory>
                          <includes>
                              <include>**/*.*</include>
                          </includes>
                      </fileSet>
                      <fileSet encoding="UTF-8">
                          <directory>src/main/resources</directory>
                          <includes>
                              <include>**/*.*</include>
                          </includes>
                      </fileSet>
                      <fileSet encoding="UTF-8">
                          <directory>src/test/resources</directory>
                          <includes>
                              <include>**/*.*</include>
                          </includes>
                      </fileSet>
                  </fileSets>
              </module>

      module屬性介紹: id:子模塊工程的artifactId dir:子模塊工程源文件在archetype-resources里對(duì)應(yīng)的directory name :子模塊的名字.

  • prototype pom文件

    • 1.定義了五個(gè)子模塊

          <!--項(xiàng)目子模塊-->
          <modules>
              <module>${rootArtifactId}-common</module>
              <module>${rootArtifactId}-dao</module>
              <module>${rootArtifactId}-service</module>
              <module>${rootArtifactId}-web</module>
              <module>${rootArtifactId}-model</module>
          </modules>


    • 子模塊依賴版本統(tǒng)一管理

      <dependencyManagement>
                  <!--modules-->
                  <dependency>
                      <groupId>${groupId}</groupId>
                      <artifactId>${rootArtifactId}-common</artifactId>
                      <version>${version}</version>
                  </dependency>
      
                  <dependency>
                      <groupId>${groupId}</groupId>
                      <artifactId>${rootArtifactId}-dao</artifactId>
                      <version>${version}</version>
                  </dependency>
      
                  <dependency>
                      <groupId>${groupId}</groupId>
                      <artifactId>${rootArtifactId}-service</artifactId>
                      <version>${version}</version>
                  </dependency>
      
                  <dependency>
                      <groupId>${groupId}</groupId>
                      <artifactId>${rootArtifactId}-model</artifactId>
                      <version>${version}</version>
                  </dependency>
              </dependencies>
          </dependencyManagement>

      子模塊所需依賴都定義在該pom中,子模塊使用依賴時(shí)不需要<version>標(biāo)簽

  • 原型文件以web模塊說(shuō)明 如何自定義archetype 就是一個(gè)簡(jiǎn)單的maven工程,里面寫了使用archetype生成模板項(xiàng)目的類

<hr>

如何自定義archetype

附:superman archetype代碼

<hr>

快速開(kāi)始【superman archetype使用指南】

  • 1.下載源碼

    git clone https://github.com/TiantianUpup/superman.git


  • 2.打開(kāi)superman工程,將其安裝到本地倉(cāng)庫(kù) 運(yùn)行如下命令

    mvn clean install


  • 3.使用自定義archetype初始化項(xiàng)目

    mvn archetype:generate 
    -DgroupId=com.h3t.test 
    -DartifactId=superman-demo 
    -Dversion=1.0.0-SNAPSHOT 
    -DarchetypeGroupId=com.h3t.study 
    -DarchetypeArtifactId=superman -DarchetypeVersion=0.0.1-SNAPSHOT -X -DarchetypeCatalog=local

    參數(shù)說(shuō)明
    -DgroupId組ID,默認(rèn)項(xiàng)目的包名的組ID相同
    DartifactId:項(xiàng)目唯一標(biāo)識(shí)符,即項(xiàng)目名稱
    -DarchetypeGroupId:superman的組ID,值不需要進(jìn)行修改
    -DarchetypeArtifactId:superman的artifactId,值不需要進(jìn)行改變

  • 4.移動(dòng)配置文件 因?yàn)槭褂?code>archetype生成項(xiàng)目時(shí)會(huì)將resource下面的文件丟失,所以目前將配置文件放在了web模塊下的resource包下,創(chuàng)建項(xiàng)目成功后需手動(dòng)將文件移動(dòng)到web模塊下的resource文件夾下,并將resource文件成標(biāo)記成Resources Root

  • 5.修改resource文件夾下的配置文件 該文件夾下有application.properties ,logback.propertieslogback-spring.xml三個(gè)配置文件

    • application.properties配置文件的修改 application.properties 主要是Spring、MyBatisPlus和數(shù)據(jù)庫(kù)的配置信息

      spring.datasource.url=jdbc:mysql://localhost:3306/your_database?characterEncoding=UTF8&serverTimezone=UTC
      spring.datasource.username=root
      spring.datasource.password=your password


      修改數(shù)據(jù)庫(kù)、密碼,默認(rèn)用戶名為root

      mybatis-plus.mapper-locations=classpath*:/mapper/*.xml  
      # mybatis-plus.type-aliases-package=


      指定MybatisPlus實(shí)體類別名的包,即model模塊的po層包名,默認(rèn)MybatiPlusmapper文件保存在resource下的mapper文件夾下,可自行修改

    • logback.properties配置文件的修改 logback.properties定義了error級(jí)別日志和info級(jí)別日志的保存地址

      LOG_ERROR_HOME=  
      LOG_INFO_HOME=


    • logback-spring.xml配置文件的修改 logback-spring.xml主要是日志輸出規(guī)則的定義,若為windows系統(tǒng)無(wú)需進(jìn)行修改,若為linux osmac os,則需修改日志保存地址

      <fileNamePattern>${LOG_ERROR_HOME}//%d.log</fileNamePattern>


      //修改為/

  • 6 使用代碼生成器生成controllerservicedao、po層代碼 代碼生成器類位于service模塊下的generator包下,只需要初始化幾個(gè)字段值運(yùn)行就可以生成相應(yīng)的代碼。在運(yùn)行前首先在項(xiàng)目根目錄下創(chuàng)建一個(gè)mp-generator-output文件夾,該文件夾的名字和OUTPUT_DIR字段值保持一致

    • PACKAGE_NAME
      生成代碼的包名,和項(xiàng)目的包名一致,負(fù)責(zé)復(fù)制過(guò)去代碼會(huì)有一些小問(wèn)題 -OUTPUT_DIR 生成代碼保存文件地址,默認(rèn)保存在項(xiàng)目下的mp-generator-output文件夾下,可以修改為自定義保存地址

    • AUTHOR
      注釋中作者的名字

    • DRIVER_NAME
      數(shù)據(jù)庫(kù)驅(qū)動(dòng)

    • HOST
      數(shù)據(jù)庫(kù)主機(jī)號(hào)

    • PORT
      數(shù)據(jù)庫(kù)端口

    • DATABASE
      數(shù)據(jù)庫(kù)名字

    • USERNAME
      數(shù)據(jù)庫(kù)用戶名

    • PASSWORD
      數(shù)據(jù)庫(kù)密碼

  • 7.將生成的代碼移動(dòng)到對(duì)應(yīng)模塊對(duì)應(yīng)包下

    • impl 對(duì)應(yīng)實(shí)體類接口實(shí)現(xiàn)類

    • controller文件夾
      實(shí)體類對(duì)應(yīng)的Controller,將該目錄下的類移到web模塊下的controller包下

    • mapper文件夾 實(shí)體類對(duì)應(yīng)的DAO層,該目錄下包含xml文件和對(duì)應(yīng)實(shí)體的接口類,將xml文件移到dao模塊resource 下的mapper文件夾下,需自行建立mapper文件夾,將接口移到dao模塊下的mapper包下并在接口類上添加@Mapper注解,需自行建立 mapper包。同時(shí)將resource文件夾標(biāo)記成Resources root

    • service 對(duì)應(yīng)實(shí)體類接口

      service目錄下的接口移到service模塊下的service包下,impl目錄下的類移到service模塊下的service.impl包下

    • po文件夾 將該目錄下的類移到model模塊下的po包下,并修改繼承關(guān)系,統(tǒng)一繼承BasePO類,因?yàn)?code>BasePO類 包含了id、gmtCreategmtModified、deleted這些數(shù)據(jù)庫(kù)基本字段,需將生成的實(shí)體類手動(dòng)刪除這些重復(fù)字段。同時(shí)自動(dòng)生成的po類缺失了@TableName、@TableField注解需手動(dòng)補(bǔ)充。注解的使用方式可參考BasePO

  • 8.修改web模塊aspect包下的環(huán)繞通知

    @Around("execution(* yourpackage.controller..*(..))")

    該切面主要用于攔截controller層返回的結(jié)果,將其封裝成統(tǒng)一結(jié)果返回

  • 9 啟動(dòng)項(xiàng)目
    web模塊下的Runner類為啟動(dòng)類,運(yùn)行該類即可啟動(dòng),默認(rèn)端口為8081

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“如何自定義archetype”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來(lái)學(xué)習(xí)!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI