作者:小傅哥
部落格:https://bugstack.cn
專案:https://gaga.plus
沉澱、分享、成長,讓自己和他人都能有所收穫!😄
大家好,我是技術UP主,小傅哥。
這篇文章將幫助粉絲夥伴們更高效地利用小傅哥構建的DDD(領域驅動設計)腳手架
,搭建工程專案,增強使用的便捷性。讓👬🏻兄弟們直接在 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
這個 archetype-catalog.xml
就是在構建 Maven 專案的腳手架時所產生的腳手架定義檔案,配置到 IntelliJ IDEA 中,才會展示出腳手架列表,並可以選擇使用。
那我知道了,雖然我不能推送到 maven 的老巢裡去。但我可以自己提供個地址呀,把 archetype-catalog.xml
推送進去。經過最開始的驗證,確實可以,完全沒問題!Easy!
但接下來的問題變得麻煩了,Jar 怎麼推送到 Maven 倉庫呢。傅哥,你不是推過嗎,你咋不行了? 死鬼!tnnd,推送 Jar 到 Maven 倉庫從24年2月改版了!!!全程式設計界的雞鴨鵝狗🦆,都沒有人發過教程!
因為這個推送 Jar 在最開始的兩天時間裡,我一度懷疑是自己超限額了,不能建立了。也曾想過要不就只推送到 阿里雲的私有倉庫吧,大家配置個 阿里雲 Maven 映象地址,也能用。但這樣的情況始終覺得不爽🙅🙅🏻,所以我走上了研究新版推送 Jar 的方式,直至最終成功啦💐!!!舒服!
接下來我就給小夥伴們分享下,這東西是怎麼推送上去的。
二、覺得我也行 🤨
1. 卡卡兩腳
做一個新的技術東西之前呢,先要檢索下資料,看看有啥坑不。這個階段也叫技術調研。卡卡一定能搜 釋出Jar到maven倉庫
,全是以前的舊版本方案,沒有一個能用的!
還有一個我寫的,卡卡上去給兩腳!不行了,確實沒啥關於新版上傳 Jar 到 Maven 倉庫的資料,自己去趟坑吧。
2. 冒煙測試
完成目標最快的方式是什麼?兄弟們!當然是結果驅動,先幹一腳,看它嚎不嚎。遇到問題再解決問題。所以我準備先無腦上傳一波,看看都給我什麼資訊。
- 地址:https://central.sonatype.com/publishing
- 看著這個上傳元件的小圖,還挺簡單的。不過在這裡它是一句有用的話都不寫。那我就寫個名字和上傳個Jar進去。心裡笑嘻嘻,難度,它會根據我的 Jar 自動分析 POM?
但發現我想多了,第一次上傳全是報錯!
- 什麼 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 這裡有非常詳細的操作說明。接下來我講一些核心的步驟,如果操作有失敗,可以參考官網資料。
開始前,登入註冊 https://central.sonatype.com - 可以選擇 github 登入。
3.1 配置 NameSpace
如果選擇 github 登入,你會有一個預設配置的 NameSpace(io.github.fuzhengwei),這個東西的作用就是要和本地工程名 groupId 保持一致的。如工程是 cn.bugstack、plus.gaga、com.liergou,那麼你在的 NameSpace 就需要配置一個這樣的調過來的域名。
- 如圖配置完新增驗證即可,最後驗證成功就可以使用了。
3.2 上傳要求
文件:https://central.sonatype.org/publish/publish-portal-upload/
- 如文件上傳要求,你需要把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次構建
第2次構建
執行指令碼
3.5 上傳 archetype-catalog.xml
把 archetype-catalog.xml 檔案,上傳到域名可訪問雲伺服器的根目錄中。
3.6 上傳打包檔案到 maven 倉庫
- 你需要按照你的工程結構也是 namespace 建立出資料夾結構,並把工程 target 打包的檔案全部複製進來。
- 最後把 io 這個資料夾,打包一個 zip 包。就可以了。
3.7 上傳 maven 倉庫
3.8 成功啦!💐
好啦,這就是整個腳手架的操作過程!現在你可以體驗使用了。