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

          架構(gòu)師必備技能:Maven Archetype生成項(xiàng)目模板

          共 4724字,需瀏覽 10分鐘

           ·

          2021-09-13 18:13

          基本每個(gè)公司的項(xiàng)目都有一套模板,只要開(kāi)新項(xiàng)目直接復(fù)制一份改改包名和一些配置就初始化了一個(gè)新項(xiàng)目。這種方式有點(diǎn)繁瑣,有沒(méi)有通過(guò)命令甚至是可視化的方式從一個(gè)模板項(xiàng)目初始化項(xiàng)目。Maven其實(shí)有提供這種能力,這就是基于原型(Archetype)的生成項(xiàng)目。

          集成項(xiàng)目模板插件

          首先需要在模板項(xiàng)目中集成Maven原型插件:


                      <plugin>
                          <groupId>org.apache.maven.plugins</groupId>
                          <artifactId>maven-archetype-plugin</artifactId>
                          <version>3.2.0</version>
                      </plugin>

          從項(xiàng)目生成模板

          從項(xiàng)目生成模板只需要三步。

          生成模板原型文件

          Maven插件允許我們從已有項(xiàng)目生成一個(gè)模板項(xiàng)目。在項(xiàng)目根目錄下執(zhí)行mvn archetype:create-from-project命令即可將該項(xiàng)目生成一個(gè)項(xiàng)目模板,生成的項(xiàng)目原型被保存在路徑target/generated-sources/archetype下。

          但是這個(gè)存在一個(gè)問(wèn)題,一些和項(xiàng)目模板源碼無(wú)關(guān)的文件也會(huì)被加入模板中,比如IDEA中的.iml文件、.idea目錄下的文件。這些“垃圾”文件需要在生成模板時(shí)被忽略。

          如果您正在學(xué)習(xí)Spring Boot,推薦一個(gè)連載多年還在繼續(xù)更新的免費(fèi)教程:http://blog.didispace.com/spring-boot-learning-2x/

          maven-archetype-plugin提供了一個(gè)屬性配置可以幫助我們實(shí)現(xiàn)該能力。在原始項(xiàng)目的根目錄(或者你喜歡的其它目錄)編寫(xiě)一個(gè).properties文件:

          # 原型的坐標(biāo) 必須聲明
          archetype.groupId=cn.felord
          # 最好按照約定以-archetype結(jié)尾
          archetype.artifactId=template-archetype
          archetype.version=1.0
          # 需要忽略的文件夾和文件類(lèi)型 英文逗號(hào)隔開(kāi)
          excludePatterns=**/.idea/**,**/*.iml

          這時(shí)候執(zhí)行生成的命令就需要指定該配置文件了:

          mvn archetype:create-from-project -Darchetype.properties=./archetype.properties

          ?

          注意:路徑為配置文件和根目錄的相對(duì)路徑。

          這樣生成的原型就忽略掉那些無(wú)用的文件了。細(xì)心的同學(xué)會(huì)發(fā)現(xiàn)生成原型中的pom.xml的坐標(biāo)變成了:

          <groupId>cn.felord</groupId>
          <artifactId>template-archetype</artifactId>
          <version>1.0</version>
          <packaging>maven-archetype</packaging>

          <name>template-archetype</name>

          安裝生成的原型

          我們需要跳轉(zhuǎn)的target/generated-sources/archetype下執(zhí)行mvn install

          安裝原型庫(kù)到本地

          在我們本地maven repository目錄(通常是~/.m2)下會(huì)把當(dāng)前原型注冊(cè)到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>cn.felord</groupId>
                <artifactId>template-archetype</artifactId>
                <version>1.0</version>
                <description>spring security learning demo</description>
              </archetype>
            </archetypes>
          </archetype-catalog>

          后續(xù)使用時(shí)maven會(huì)從這里檢索我們本地的模板。

          利用原型生成項(xiàng)目

          接下來(lái)驗(yàn)證一下效果,從本地原型生成項(xiàng)目需要執(zhí)行:

          mvn archetype:generate -DarchetypeCatalog=local

          創(chuàng)建項(xiàng)目步驟都在這里

          然后一個(gè)新項(xiàng)目就誕生了。

          分享模板

          模板分享基于Maven遠(yuǎn)程倉(cāng)庫(kù),首先你要在你的setting.xml中配置一個(gè)遠(yuǎn)程倉(cāng)庫(kù)并且擁有deploy的權(quán)限。然后在target/generated-sources/archetype下執(zhí)行mvn deploy就行了。這里有兩種方式來(lái)使用遠(yuǎn)程的原型模版。

          IDEA添加Maven原型模板

          點(diǎn)擊New Project然后選擇Maven,勾選Create from archetype點(diǎn)擊Add Archetype彈出對(duì)話框:

          IDEA添加原型模板

          然后模板就被添加到模板列表了,選中添加的模板點(diǎn)擊下一步就可以使用了。

          命令行

          就像使用本地原型創(chuàng)建項(xiàng)目一樣,這里給你一套命令執(zhí)行就可以了:

          mvn archetype:generate \
           -DgroupId=cn.felord.demo    \
           -DartifactId=demo-project   \
           -Dversion=1.0.0       \
           -Dpackage=cn.felord.demo   \
           -DarchetypeGroupId=cn.felord  \
           -DarchetypeArtifactId=template-archetype  \
           -DarchetypeVersion=1.0  \
           -DinteractiveMode=false    

          ?

          如果你想通過(guò)交互命令生成,就把前三個(gè)選項(xiàng)和最后一個(gè)DinteractiveMode去掉試試。

          不要忘了把下面的遠(yuǎn)程倉(cāng)庫(kù)配置到setting.xml;

            <repository>
              <id>archetype</id>
               <!-- 倉(cāng)庫(kù)地址 -->  
              <url>https://repository.domain.com/path/to/repo/</url>
            </repository>
            
            <!-- 倉(cāng)庫(kù)的認(rèn)證信息 -->
            <server>
              <id>archetype</id>
              <username>repousername</username>
              <password>xxx.felord.cn</password>
            </server>

          項(xiàng)目模版生成在項(xiàng)目研發(fā)中很重要,可以讓我們的項(xiàng)目能保持一致性,也方便后續(xù)轉(zhuǎn)微服務(wù)或者維護(hù)升級(jí),是每一個(gè)立志成為Java架構(gòu)師的開(kāi)發(fā)者必備的一個(gè)技能。


          往期推薦

          如何更快地將string轉(zhuǎn)換成int/long

          OAuth2 服務(wù)器Keycloak中的Realm

          Java 17 將至,可能帶來(lái)哪些新特性呢?

          機(jī)械妖姬上門(mén)要源碼后續(xù)結(jié)果來(lái)了!

          重磅消息:Spring 6 和Spring Boot 3

          瀏覽 53
          點(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>
                  中文字幕一区二区三区润滑油 | 久久精品禁一区二区三区四区五区 | 免费囯产一区二区三区四区 | 超碰欧美超碰 | 中国美女一级大片 |