釋出DDD腳手架到Maven倉庫,IntelliJ IDEA 配置一下即可使用

小傅哥發表於2024-03-12

作者:小傅哥

部落格:https://bugstack.cn

專案:https://gaga.plus

沉澱、分享、成長,讓自己和他人都能有所收穫!😄

大家好,我是技術UP主,小傅哥。

這篇文章將幫助粉絲夥伴們更高效地利用小傅哥構建的DDD(領域驅動設計)腳手架,搭建工程專案,增強使用的便捷性。讓👬🏻兄弟們直接在 IntelliJ IDEA 配置個線上的連結,就能直接用上這款腳手架!—— 你就說猛不猛!🤨

釋出DDD腳手架到Maven倉庫,IntelliJ IDEA 配置一下即可使用

那小傅哥搞的這個線上版腳手架是怎麼做到的呢? 🤔 想學嗎,想學我教你呀?

在23年的時候小傅哥釋出了 DDD 兩款腳手架,一個輕量版 lite ,一個標準版 std。透過這兩款腳手架,小夥伴們在學習小傅哥寫的技術教程和實戰專案的時候,可以把腳手架程式碼下載到本地,透過 maven install 在本地構建出腳手架再配置到上圖中的地址後使用。

我的理想情況是大家都能很順利的構建、配置,美滋滋的使用,但實際情況卻是,編碼的路上,錯誤是層出不窮!

所以,我動手了。我要為你們提供更Easy的方式!但也差點難住我。接下來我就給夥伴們分享下,這個東西是如何搞的。

一、思考的開始 🤔

我釋出過自己的 IntelliJ IDEA vo2dto 到外掛市場,也推送過 openai sdk、chatglm sdk、db-router 等元件到 Maven 中央倉庫。

那我就心思了,這腳手架也是個 Jar 包,應該也能釋出到 Maven 中央倉庫呀。要不Maven Central 自己那個腳手架是怎麼發上去的?在程式設計開發這個事上,我一直秉承著,只要我能看見的,就都應該能復刻出來。

但你知道這裡有一點,釋出到 Maven 倉庫的是 Jar 包,那我配置腳手架的地址哪裡來呢(地址裡是腳手架的定義)?我應該也沒辦法把腳手架的定義推送到人家 maven.apache.org 下面去。畢竟那是人家的老巢。如果能推送,那我現在開啟的 Maven Central 應該有一堆腳手架,而不只是 Maven Central 所釋出自己的。

所以,我靈機一動😁,開啟了 https://repo.maven.apache.org/maven2

釋出DDD腳手架到Maven倉庫,IntelliJ IDEA 配置一下即可使用

這個 archetype-catalog.xml 就是在構建 Maven 專案的腳手架時所產生的腳手架定義檔案,配置到 IntelliJ IDEA 中,才會展示出腳手架列表,並可以選擇使用。

那我知道了,雖然我不能推送到 maven 的老巢裡去。但我可以自己提供個地址呀,把 archetype-catalog.xml 推送進去。經過最開始的驗證,確實可以,完全沒問題!Easy!

但接下來的問題變得麻煩了,Jar 怎麼推送到 Maven 倉庫呢。傅哥,你不是推過嗎,你咋不行了? 死鬼!tnnd,推送 Jar 到 Maven 倉庫從24年2月改版了!!!全程式設計界的雞鴨鵝狗🦆,都沒有人發過教程!

釋出DDD腳手架到Maven倉庫,IntelliJ IDEA 配置一下即可使用

因為這個推送 Jar 在最開始的兩天時間裡,我一度懷疑是自己超限額了,不能建立了。也曾想過要不就只推送到 阿里雲的私有倉庫吧,大家配置個 阿里雲 Maven 映象地址,也能用。但這樣的情況始終覺得不爽🙅🙅🏻‍,所以我走上了研究新版推送 Jar 的方式,直至最終成功啦💐!!!舒服!

接下來我就給小夥伴們分享下,這東西是怎麼推送上去的。

二、覺得我也行 🤨

1. 卡卡兩腳

做一個新的技術東西之前呢,先要檢索下資料,看看有啥坑不。這個階段也叫技術調研。卡卡一定能搜 釋出Jar到maven倉庫,全是以前的舊版本方案,沒有一個能用的!

釋出DDD腳手架到Maven倉庫,IntelliJ IDEA 配置一下即可使用

還有一個我寫的,卡卡上去給兩腳!不行了,確實沒啥關於新版上傳 Jar 到 Maven 倉庫的資料,自己去趟坑吧。

2. 冒煙測試

完成目標最快的方式是什麼?兄弟們!當然是結果驅動,先幹一腳,看它嚎不嚎。遇到問題再解決問題。所以我準備先無腦上傳一波,看看都給我什麼資訊。

釋出DDD腳手架到Maven倉庫,IntelliJ IDEA 配置一下即可使用
  • 地址:https://central.sonatype.com/publishing
  • 看著這個上傳元件的小圖,還挺簡單的。不過在這裡它是一句有用的話都不寫。那我就寫個名字和上傳個Jar進去。心裡笑嘻嘻,難度,它會根據我的 Jar 自動分析 POM?

但發現我想多了,第一次上傳全是報錯!

釋出DDD腳手架到Maven倉庫,IntelliJ IDEA 配置一下即可使用
  • 什麼 pom 檔案沒傳。所以我又機智的把 Jar 和 POM 打包了 zip 上傳。
  • 緊接著報錯 Invalid 'md5' checksum for file: scaffold-lite-1.0-sources.jar,缺少 md5、sha1 驗證。好在我以前釋出過 maven 倉庫,知道這些配置。
  • 基本上知道要怎麼傳了,接下來,細看文件。遇到什麼類錯誤,優先看什麼內容。

3. 操作步驟

https://central.sonatype.com/publishing 首頁有一個 Help 幫助文件,https://central.sonatype.org/register/central-portal/#producers 這裡有非常詳細的操作說明。接下來我講一些核心的步驟,如果操作有失敗,可以參考官網資料。

釋出DDD腳手架到Maven倉庫,IntelliJ IDEA 配置一下即可使用

開始前,登入註冊 https://central.sonatype.com - 可以選擇 github 登入。

3.1 配置 NameSpace

如果選擇 github 登入,你會有一個預設配置的 NameSpace(io.github.fuzhengwei),這個東西的作用就是要和本地工程名 groupId 保持一致的。如工程是 cn.bugstack、plus.gaga、com.liergou,那麼你在的 NameSpace 就需要配置一個這樣的調過來的域名。

釋出DDD腳手架到Maven倉庫,IntelliJ IDEA 配置一下即可使用
釋出DDD腳手架到Maven倉庫,IntelliJ IDEA 配置一下即可使用
  • 如圖配置完新增驗證即可,最後驗證成功就可以使用了。

3.2 上傳要求

文件:https://central.sonatype.org/publish/publish-portal-upload/

釋出DDD腳手架到Maven倉庫,IntelliJ IDEA 配置一下即可使用
  • 如文件上傳要求,你需要把jar、pom、doc、sources 全部打包到 zip 包,同時每個檔案的 asc、md5、sha1 也需要打包進來。
  • 這些檔案也都是在舊版上傳 maven 中央倉庫的時候,所需提供的內容。

3.3 專案配置

原始碼https://gitcode.net/KnowledgePlanet/road-map/xfg-frame-archetype-lite/-/tree/master/scaffold-lite

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>io.github.fuzhengwei</groupId>
    <artifactId>ddd-scaffold-lite</artifactId>
    <version>1.0</version>
    <packaging>maven-archetype</packaging>

    <name>ddd-scaffold-lite</name>

    <properties>
        <java.version>1.8</java.version>
        <maven-javadoc-plugin.version>3.2.0</maven-javadoc-plugin.version>
        <maven-source-plugin.version>3.2.1</maven-source-plugin.version>
        <maven-gpg-plugin.version>1.6</maven-gpg-plugin.version>
        <maven-checksum-plugin.version>1.10</maven-checksum-plugin.version>
    </properties>

    <build>
        <extensions>
            <extension>
                <groupId>org.apache.maven.archetype</groupId>
                <artifactId>archetype-packaging</artifactId>
                <version>3.2.0</version>
            </extension>
        </extensions>

        <plugins>
            <plugin>
                <groupId>net.nicoulaj.maven.plugins</groupId>
                <artifactId>checksum-maven-plugin</artifactId>
                <version>${maven-checksum-plugin.version}</version>
                <executions>
                    <execution>
                        <id>create-checksums</id>
                        <goals>
                            <goal>artifacts</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-source-plugin</artifactId>
                <version>2.2.1</version>
                <executions>
                    <execution>
                        <id>attach-sources</id>
                        <goals>
                            <goal>jar-no-fork</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-javadoc-plugin</artifactId>
                <version>2.9.1</version>
                <configuration>
                    <encoding>UTF-8</encoding>
                    <aggregate>true</aggregate>
                    <charset>UTF-8</charset>
                    <docencoding>UTF-8</docencoding>
                </configuration>
                <executions>
                    <execution>
                        <id>attach-javadocs</id>
                        <goals>
                            <goal>jar</goal>
                        </goals>
                        <configuration>
                            <additionalparam>-Xdoclint:none</additionalparam>
                            <javadocExecutable>
                                /Library/Java/JavaVirtualMachines/jdk1.8.0_341.jdk/Contents/Home/bin/javadoc
                            </javadocExecutable>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <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>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-release-plugin</artifactId>
                <version>2.5.3</version>
                <configuration>
                    <autoVersionSubmodules>true</autoVersionSubmodules>
                    <useReleaseProfile>false</useReleaseProfile>
                    <releaseProfiles>release</releaseProfiles>
                    <goals>deploy</goals>
                </configuration>
            </plugin>
        </plugins>
    </build>

    <profiles>
        <profile>
            <id>release</id>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-javadoc-plugin</artifactId>
                        <version>3.3.1</version> <!-- 使用最新版本 -->
                        <executions>
                            <execution>
                                <id>attach-javadocs</id>
                                <goals>
                                    <goal>jar</goal> <!-- 繫結到 jar 目標 -->
                                </goals>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>
    </profiles>

    <description>ddd scaffold lite by xiaofuge</description>

    <url>https://spring.io/projects/spring-boot/xfg-frame-archetype</url>

    <developers>
        <developer>
            <name>fuzhengwei</name>
            <email>184172133@qq.com</email>
            <organization>fuzhengwei</organization>
            <organizationUrl>https://github.com/fuzhengwei</organizationUrl>
        </developer>
    </developers>

</project>
  • 注意 groupId、artifactId 名字,如果你有釋出訴求,需要和你自己的一直。
  • maven-javadoc-plugin:生成 doc 文件。這裡要注意,因為我們腳手架不是程式碼檔案,沒有doc的,所以要在工程中加一個任意類名檔案。工程中小傅哥加了個 Api 類。
  • maven-source-plugin:生成 source 檔案。
  • maven-gpg-plugin:是簽名的加密檔案,需要本地安裝過 gpg 包。
  • checksum-maven-plugin:生成 md5、sha1 檔案,但這裡不會對 pom 生成此檔案,還需要單獨命令處理。

3.4 構建專案

第1次構建

釋出DDD腳手架到Maven倉庫,IntelliJ IDEA 配置一下即可使用

第2次構建

釋出DDD腳手架到Maven倉庫,IntelliJ IDEA 配置一下即可使用

執行指令碼

釋出DDD腳手架到Maven倉庫,IntelliJ IDEA 配置一下即可使用

3.5 上傳 archetype-catalog.xml

把 archetype-catalog.xml 檔案,上傳到域名可訪問雲伺服器的根目錄中。

釋出DDD腳手架到Maven倉庫,IntelliJ IDEA 配置一下即可使用

3.6 上傳打包檔案到 maven 倉庫

釋出DDD腳手架到Maven倉庫,IntelliJ IDEA 配置一下即可使用
  • 你需要按照你的工程結構也是 namespace 建立出資料夾結構,並把工程 target 打包的檔案全部複製進來。
  • 最後把 io 這個資料夾,打包一個 zip 包。就可以了。

3.7 上傳 maven 倉庫

釋出DDD腳手架到Maven倉庫,IntelliJ IDEA 配置一下即可使用

3.8 成功啦!💐

釋出DDD腳手架到Maven倉庫,IntelliJ IDEA 配置一下即可使用

好啦,這就是整個腳手架的操作過程!現在你可以體驗使用了。


釋出DDD腳手架到Maven倉庫,IntelliJ IDEA 配置一下即可使用

相關文章