溫馨提示×

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

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

代碼生成器maven插件源碼怎么編寫

發(fā)布時(shí)間:2021-10-19 17:25:34 來源:億速云 閱讀:191 作者:柒染 欄目:大數(shù)據(jù)

本篇文章為大家展示了代碼生成器maven插件源碼怎么編寫,內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。

為什么要寫一個(gè)代碼生成器

在寫后端項(xiàng)目的時(shí)候,基礎(chǔ)的實(shí)現(xiàn)功能都是增刪查改,通常以表或者指定的數(shù)據(jù)模型為單位進(jìn)行增刪查改。

在大部分的Web項(xiàng)目中,通常寫一個(gè)增刪查改需要新建很多個(gè)基礎(chǔ)類。

假設(shè)你的項(xiàng)目是由 控制層、服務(wù)層、數(shù)據(jù)訪問層組成,那么如果新增一個(gè)表的增刪查改功能,我們就也許需要針對(duì)這個(gè)表創(chuàng)建以下這些類。

Model.java
ModelController.java
IModelService.java
ModelService.java
IModelDao.java
ModelDao.java

創(chuàng)建完成后,某些項(xiàng)目結(jié)構(gòu)是有通用的基礎(chǔ)類,可能還需要根據(jù)Model類型來添加泛型,這樣又是需要一頓復(fù)制粘貼的操作。

interface IModelService extends IBaseService<Model,Long> {}
class ModelService extends BaseService<Model,Long> implements IModelService {}
interface IModelDao extends IBaseDao<Model,Long> {}
class ModelDao extends BaseDao<Model,Long> implements IModelDao {}

當(dāng)然每個(gè)公司的項(xiàng)目結(jié)構(gòu)都不同,以上操作可能有多有少,但是對(duì)于一個(gè)后臺(tái)系統(tǒng)來說,大量類似的增刪查改類是少不了的。 如果你的項(xiàng)目結(jié)構(gòu)是無規(guī)律的,那么代碼生成器可能不太適合你

代碼生成器的級(jí)別

  1. 復(fù)制粘貼型代碼生成器
    顧名思義,最簡(jiǎn)單也是用的最多的方式,直接將現(xiàn)有的其他類似文件復(fù)制一份,改一改關(guān)鍵信息即可。成本最低,耗時(shí)根據(jù)項(xiàng)目需要復(fù)制的文件決定。有可能因?yàn)樯俑哪承﹥?nèi)容導(dǎo)致代碼異常。

總的來說,通過復(fù)制粘貼的方式來生成代碼,簡(jiǎn)單易用,無學(xué)習(xí)成本,但是比較容易出錯(cuò),有一定修改成本,耗時(shí)和文件數(shù)量、修改內(nèi)容成正比。

  1. 框架自帶代碼生成器
    通常和框架綁定,對(duì)于已有的系統(tǒng)難以植入,局限性高。生成的代碼格式較為單一,很難做靈活配置化使用。

  2. 自定義代碼生成器
    因?yàn)榇蟛糠窒到y(tǒng)的代碼結(jié)構(gòu)比較統(tǒng)一,但又有些不同,所以在市場(chǎng)上沒有適合自己的生成器的時(shí)候,我們就會(huì)選擇自己寫一個(gè),通過直接執(zhí)行main方法來生成文件,定義幾個(gè)參數(shù),在需要生成的時(shí)候進(jìn)行修改執(zhí)行。

本文介紹的代碼生成器主要在此基礎(chǔ)上進(jìn)行擴(kuò)展,通過maven插件的方式,將需要自定義的參數(shù)通過插件配置來運(yùn)行,這樣一套代碼多地使用,只需要添加maven依賴,不需要將生成器的代碼復(fù)制多遍難以維護(hù)。

自定義代碼生成器maven插件

代碼生成器的原理,大體就是根據(jù)指定的模板,傳入動(dòng)態(tài)的參數(shù),替換模板內(nèi)容,動(dòng)態(tài)生成不同的文件代碼。

通過maven插件的方式,可以很好的集成到我們的項(xiàng)目中,只需要添加插件依賴,然后添加幾個(gè)配置,執(zhí)行maven相關(guān)命令,就可以完成代碼生成的操作。

這是我在工作當(dāng)中為了給組員提供更優(yōu)質(zhì)的開發(fā)體驗(yàn),而編寫的一款代碼生成器。

  • 地址: https://github.com/k55k32/simple-codegen

  • simple-codegen 使用freemarker作為模板引擎,結(jié)合maven插件,使參數(shù)配置簡(jiǎn)單化, 并且多項(xiàng)目使用只需要添加插件依賴,并且修改制定參數(shù),定制好模板,即可一鍵生成代碼。

  • 因?yàn)槟0蹇梢愿鶕?jù)項(xiàng)目自定義,基本所有情況下,只需要定義好模板,配置參數(shù),即可開始使用

  • 目前的參數(shù)都算是固定參數(shù),未來可能還將支持一些動(dòng)態(tài)參數(shù)例如:

  1. 讀取表結(jié)構(gòu)作為參數(shù)

  2. 直接調(diào)用接口, 獲取返回值作為參數(shù)

  3. 直接調(diào)用本地代碼,獲取返回值作為參數(shù)

代碼實(shí)現(xiàn)細(xì)節(jié)講解

  • 代碼真的很簡(jiǎn)單,目前總共就一個(gè)模板渲染的功能,大家可以自行看源碼,不懂的可以提Issue, 有優(yōu)化可以提 Pull Request

上傳至中央倉(cāng)庫(kù)教程

我真是邊寫教程邊上傳,真正的一手實(shí)操經(jīng)驗(yàn)

1. 申請(qǐng)中央倉(cāng)庫(kù)賬號(hào)

  • 進(jìn)入 https://issues.sonatype.org

  • 點(diǎn)擊 Sign up 創(chuàng)建賬號(hào)

  • 新建一個(gè)問題類型為New Project的, 注意Group Id和自己項(xiàng)目pom.xml要一致,如果是自己的域名,需要有域名DNS管理權(quán)限,因?yàn)閭}(cāng)庫(kù)管理員會(huì)要求你添加TXT記錄指向指定地址。如果沒有自己的域名,可以用自己的Github地址,管理員會(huì)要求你創(chuàng)建一個(gè)指定名稱的倉(cāng)庫(kù)

代碼生成器maven插件源碼怎么編寫

  • 提交申請(qǐng)完成后,管理員就會(huì)通知你用戶已經(jīng)可以上傳快照版本或者發(fā)布版本了

代碼生成器maven插件源碼怎么編寫

前期注冊(cè)工作就完成了,接下來是上傳流程,接下來流程用到的用戶名密碼使用剛剛創(chuàng)建的用戶名密碼

2. pom.xml 修改和 settings.xml 配置

  • 在本地maven配置 settings.xml 內(nèi)添加自己的賬號(hào)密碼(上傳需要), id可以自定義。賬號(hào)密碼可以明文輸入,也可以登陸 https://oss.sonatype.org 點(diǎn)擊右上角用戶名進(jìn)入Profile, 然后選擇User Token創(chuàng)建一個(gè)加密的 Access User Token , 可以替換 settings.xml 內(nèi)的賬號(hào)密碼,這樣可以避免明文保存用戶名密碼

<servers>
    <server>
        <id>sonatype-center</id>
        <username>youRegisterUsername</username>
        <password>youRegisterPassword</password>
    </server>
</servers>
  • pom.xml 內(nèi)添加遠(yuǎn)程發(fā)布倉(cāng)庫(kù)地址,注意id需要和 settings-xml配置的一致

<distributionManagement>
    <repository>
        <id>sonatype-center</id>
        <name>releases repo</name>
        <url>https://oss.sonatype.org/service/local/staging/deploy/maven2</url>
    </repository>
    <snapshotRepository>
        <id>sonatype-center</id>
        <name>snapshots repo</name>
        <url>https://oss.sonatype.org/content/repositories/snapshots</url>
    </snapshotRepository>
</distributionManagement>
  • pom.xml 文件內(nèi)容如要標(biāo)準(zhǔn)化,需要添加以下標(biāo)簽描述,內(nèi)容自定義,已添加請(qǐng)忽略,可參考 pom.xml

<name>simple-codegen</name>
<url>https://diamondfsd.com</url>

<description>
    simple code generate maven plugin.
    Template rendering through Java and freemarker.
</description>

<developers>
    <developer>
        <id>diamondfsd</id>
        <name>Diamond Zhou</name>
        <email>diamondfsd@gmail.com</email>
        <url>https://diamondfsd.com</url>
        <timezone>8</timezone>
    </developer>
</developers>

<licenses>
    <license>
        <name>The MIT License</name>
        <url>https://opensource.org/licenses/MIT</url>
        <distribution>repo</distribution>
    </license>
</licenses>
<scm>
    <url>
        https://github.com/k55k32/simple-codegen.git
    </url>
</scm>

3. 文件簽名 (不簽名無法發(fā)布)

  • 簽名教程

  • windows版本密鑰生成工具下載: https://gpg4win.org/download.html

安裝完成后的名字叫: Kleopatra 打開后,新建一個(gè)密鑰對(duì),創(chuàng)建完成后。

注意如果是在IDE等環(huán)境中運(yùn)行maven,安裝完Kleopatra需要重啟IDE,否則環(huán)境變量未生效,執(zhí)行maven插件的時(shí)候,找不到 gpg 命令

  • pom.xml 添加插件配置

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-gpg-plugin</artifactId>
    <version>1.5</version>
    <executions>
        <execution>
            <id>sign-artifacts</id>
            <phase>verify</phase>
            <goals>
                <goal>sign</goal>
            </goals>
        </execution>
    </executions>
</plugin>

4. 到中央倉(cāng)庫(kù)發(fā)布

  • 執(zhí)行 mvn clean deploy 上傳到中央倉(cāng)庫(kù)

  • 登陸 https://oss.sonatype.org/ 點(diǎn)擊左側(cè) Staging Repositoryies 菜單,然后下拉到最下面,可以找到你剛剛上傳的包

  • 選中改包點(diǎn)擊 Close

  • Close 完成后,點(diǎn)擊 Release (如果Close失敗, 點(diǎn)擊項(xiàng)目,可以在底部Activity內(nèi)看到失敗原因,根據(jù)原因自行解決)

  • Release 完成后,你的包就進(jìn)入了中央倉(cāng)庫(kù)同步隊(duì)列了,同步完成后,其他人就可以直接在 pom.xml 內(nèi)添加你的包依賴了,具體的同步時(shí)間,官方給出的是10分鐘內(nèi)會(huì)同步到中央倉(cāng)庫(kù),可以引用依賴。然后2小時(shí)內(nèi)同步到搜索引擎,可以在 https://search.maven.org 搜索到。

上述內(nèi)容就是代碼生成器maven插件源碼怎么編寫,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(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