<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Maven Archetype 多 Module 自定義代碼腳手架

          共 2110字,需瀏覽 5分鐘

           ·

          2022-01-16 16:31

          大部分公司都會(huì)有一個(gè)通用的模板項(xiàng)目,幫助你快速創(chuàng)建一個(gè)項(xiàng)目。通常,這個(gè)項(xiàng)目需要集成一些公司內(nèi)部的中間件、單元測(cè)試、標(biāo)準(zhǔn)的代碼格式、通用的代碼分層等等。

          今天,就利用 Maven 的 Archetype 插件來(lái)簡(jiǎn)單實(shí)現(xiàn)這一功能。

          通過(guò)上面的圖很清楚可以看到,實(shí)際利用這個(gè)插件機(jī)制就簡(jiǎn)單的幾個(gè)步驟:

          1. archetype:create-from-project ,根據(jù)自己的項(xiàng)目代碼生成原型項(xiàng)目
          2. 通過(guò) install 等命令生成原型文件
          3. archetype:generate,通過(guò)原型生成目標(biāo)項(xiàng)目

          看起來(lái)挺簡(jiǎn)單的,但是你會(huì)發(fā)現(xiàn)你用網(wǎng)上搜到的資料來(lái)玩的話,你生成的項(xiàng)目特別傻X,包括官方的文檔,我也真是沒(méi)搞明白他們?yōu)楹文敲磁1疲徊絻刹健!>退麐尯昧耍?/p>

          一堆問(wèn)題,比如 module 名稱不會(huì)變、包名變了代碼中沒(méi)變,依賴報(bào)錯(cuò)一大堆問(wèn)題,還是有必要說(shuō)下中間要怎么做的。

          創(chuàng)建Archetype

          首先,準(zhǔn)備好我們自己的模板項(xiàng)目,保證代碼都是OK的。

          進(jìn)入項(xiàng)目根目錄,執(zhí)行命令:

          mvn?archetype:create-from-project

          然后項(xiàng)目根目錄下會(huì)生成target文件夾,這個(gè)很簡(jiǎn)單,不會(huì)有任何障礙,你看下面的圖,注意看每個(gè)模塊的名字,這是我改過(guò)的!!

          你生成應(yīng)該會(huì)發(fā)現(xiàn)他不長(zhǎng)這樣,這就是問(wèn)題啊!接著往下看吧。

          這里最核心的部分就在于怎么修改target/generated-sources/src/main/resources/archetype-resources下的文件。

          如果不修改直接繼續(xù)的話,最終生成的項(xiàng)目會(huì)發(fā)現(xiàn)module的名稱不會(huì)變,包名也不會(huì)變,代碼里引用的會(huì)有一堆報(bào)錯(cuò)。

          接著,我們看看咋改的,這一堆破問(wèn)題。

          修改父pom

          首先,找到根目錄的pom文件,會(huì)發(fā)現(xiàn)缺少module信息,這個(gè)必須加上。

          ?<modules>
          ??<module>${rootArtifactId}-clientmodule>
          ??<module>${rootArtifactId}-commonmodule>
          ??<module>${rootArtifactId}-servicemodule>
          ??<module>${rootArtifactId}-facademodule>
          ??<module>${rootArtifactId}-startermodule>
          ?modules>

          父pom依賴引用的每個(gè)module也要修改,groupId 和 artifactId 按照我給出的方式來(lái)改,不要寫(xiě)死!!

          <dependencyManagement>
          ??<dependencies>
          ???<dependency>
          ????<groupId>${groupId}groupId>
          ????<artifactId>${rootArtifactId}-clientartifactId>
          ????<version>${project.version}version>
          ???dependency>
          ???...?...
          ??dependencies>
          ?dependencyManagement>

          修改module

          這個(gè)就是圖中的問(wèn)題,默認(rèn)生成的module可能就是模板項(xiàng)目的名字,需要修改成類似__rootArtifactId__-client這種形式,注意是雙下劃線。

          然后module中的互相引用 groupId 和 artifactId 按照父 pom 的方式對(duì)應(yīng)修改。

          archetype-metadata 修改

          找到META-INF/maven/archetype-metadata.xml文件,修改modules相關(guān)的部分,重點(diǎn)注意看 id 、dir、name 的修改方式。

          <modules>
          ????<module?id="${rootArtifactId}-client"?dir="__rootArtifactId__-client"?name="${rootArtifactId}-client">
          ??????<fileSets>
          ????????<fileSet?filtered="true"?packaged="true"?encoding="UTF-8">
          ??????????<directory>src/main/javadirectory>
          ??????????<includes>
          ????????????<include>**/*.javainclude>
          ??????????includes>
          ????????fileSet>
          ??????fileSets>
          ????module>
          ????...?...
          modules>????

          修改完成之后,進(jìn)入 target/generated-sources/archetype目錄,執(zhí)行命令:

          mvn?install

          順便執(zhí)行下mvn deploy上傳到nexus。

          使用Archetype

          經(jīng)過(guò)上面的步驟,原型 Archetype 已經(jīng)創(chuàng)建完成,其實(shí)最大的坑也就是上面那部分,花了老半天時(shí)間,簡(jiǎn)直坑爹啊。

          下面看看怎么使用吧,兩種使用方式。

          命令行

          隨便進(jìn)入你想保存項(xiàng)目的路徑,執(zhí)行命令。

          mvn?archetype:generate?-DarchetypeCatalog=local

          依次按照提示輸入 groupId、artifactId 即可完成創(chuàng)建。

          那怎么給其他人使用?

          你的本地maven倉(cāng)庫(kù)目錄(比如~/.m2/repository)有一個(gè)文件archetype-catalog.xml,共享給其他人就行了。


          <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.examplegroupId>
          ??????<artifactId>template-archetypeartifactId>
          ??????<version>1.0.0-SNAPSHOTversion>
          ??????<description>Example?Projectdescription>
          ????archetype>
          ??archetypes>
          archetype-catalog>

          IDEA

          新建項(xiàng)目,選擇 Maven,勾選 Create from archetype,選擇 Add Archetype...

          接著,輸入我們自定義的 Archetype 的 GroupId、ArtifactId、Version 信息。

          Add 成功之后就可以在列表中看到我們自己的 archetype,然后按照流程創(chuàng)建即可。


          瀏覽 87
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  麻豆视频一区999 | 久久99久久99久久99人受 | 豆花无码视频一区二区 | 色欲天香综合 | 中文久久精品 |