您好,登錄后才能下訂單哦!
這篇文章主要介紹了如何自定義archetype,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
雖然maven已經(jīng)提供了maven-archetype-webapp、maven-archetype-quickstart等項(xiàng)目骨架幫助我們快速構(gòu)建項(xiàng)目架構(gòu),但是默認(rèn)提供的archetype初始化的項(xiàng)目架構(gòu)并不能滿足開(kāi)發(fā)需求,這時(shí)候就有必要自己寫一個(gè)滿足項(xiàng)目需求的archetype了
為了激發(fā)閱讀興趣,先放一張使用自定義archetype生成項(xiàng)目的項(xiàng)目結(jié)構(gòu)圖 基本上的類都是archetype
生成的
可以簡(jiǎn)單的理解為模板工具類,通過(guò)archetype
我們可以快速的生成項(xiàng)目的基本架構(gòu)。比如我們使用idea
創(chuàng)建一個(gè)maven web
項(xiàng)目時(shí),常常會(huì)選擇maven-archetype-webapp
模板來(lái)初始化項(xiàng)目,使用maven-archetype-webapp
生成的項(xiàng)目中包括webapp
目錄,里面包含web
的配置文件
要想寫一個(gè)自定義archetype
,首先得知道一個(gè)archetype的組成。archetype由四部分組成:
prototype files
原型文件
位于src/main/resources/archetype-resource
目錄下。prototype files
原型文件可以理解為多模塊中的子模塊或是單模塊工程中的源文件[即src文件]。這些原型文件在使用對(duì)應(yīng)archetype
生成項(xiàng)目時(shí)被生成
archetype-metadata.xml
位于src/main/resources/META-INF/maven/
目錄下。該配置文件中主要列出了原型文件以及使用archetype
生成模板工程需要的參數(shù)
prototype pom
位于src/main/resources/archetype-resources
目錄下。這個(gè)pom
文件會(huì)出現(xiàn)在archetype
創(chuàng)建的模板工程中,如果是單模塊工程,則是對(duì)整個(gè)項(xiàng)目的依賴管理;如果是多模塊工程,該pom
是總pom
文件,該文件中會(huì)定義項(xiàng)目的子模塊以及對(duì)子模塊的依賴進(jìn)行管理等,子模塊pom
定義在子模塊下,子模塊pom文件只管理子模塊的依賴。
archetype pom
位于自定義archetype
工程的根目錄下。這是archetype
工程項(xiàng)目的pom
文件,里面一般沒(méi)什么東西,不會(huì)出現(xiàn)在archetype
創(chuàng)建的模板工程中
superman
項(xiàng)目結(jié)構(gòu)圖 包含了archetype
的四個(gè)組成部分,兩個(gè)pom
文件,一個(gè)archtype-metadata
文件和五個(gè)原型文件[__rootArtifactId__-*
],其中__rootArtifactId__
在生成模板工程時(shí)會(huì)被傳入的值替代
archtype-metadata配置文件
1.定義使用archetype
生成模板工程需要傳入的參數(shù)
<!--需要輸入的屬性--> <requiredProperties> <requiredProperty key="groupId"> <!--默認(rèn)的groupId--> <defaultValue>com.h3t.test</defaultValue> </requiredProperty> <requiredProperty key="artifactId"> <!--默認(rèn)的artifactId--> <defaultValue>demo</defaultValue> </requiredProperty> <requiredProperty key="package"> <!--默認(rèn)的包名和groupId一樣--> <defaultValue>${groupId}</defaultValue> </requiredProperty> </requiredProperties>
${}
標(biāo)識(shí)的變量都是通過(guò)maven中的命令行傳進(jìn)來(lái)的
2.定義原型文件
<module id="${rootArtifactId}-web" name="${rootArtifactId}-web" dir="__rootArtifactId__-web"> <fileSets> <fileSet filtered="true" encoding="UTF-8" packaged="true"> <directory>src/main/java</directory> <includes> <include>**/*.*</include> </includes> </fileSet> <fileSet filtered="true" encoding="UTF-8" packaged="true"> <directory>src/test/java</directory> <includes> <include>**/*.*</include> </includes> </fileSet> <fileSet encoding="UTF-8"> <directory>src/main/resources</directory> <includes> <include>**/*.*</include> </includes> </fileSet> <fileSet encoding="UTF-8"> <directory>src/test/resources</directory> <includes> <include>**/*.*</include> </includes> </fileSet> </fileSets> </module>
module
屬性介紹: id
:子模塊工程的artifactId
dir
:子模塊工程源文件在archetype-resources
里對(duì)應(yīng)的directory
name
:子模塊的名字.
prototype pom文件
1.定義了五個(gè)子模塊
<!--項(xiàng)目子模塊--> <modules> <module>${rootArtifactId}-common</module> <module>${rootArtifactId}-dao</module> <module>${rootArtifactId}-service</module> <module>${rootArtifactId}-web</module> <module>${rootArtifactId}-model</module> </modules>
子模塊依賴版本統(tǒng)一管理
<dependencyManagement> <!--modules--> <dependency> <groupId>${groupId}</groupId> <artifactId>${rootArtifactId}-common</artifactId> <version>${version}</version> </dependency> <dependency> <groupId>${groupId}</groupId> <artifactId>${rootArtifactId}-dao</artifactId> <version>${version}</version> </dependency> <dependency> <groupId>${groupId}</groupId> <artifactId>${rootArtifactId}-service</artifactId> <version>${version}</version> </dependency> <dependency> <groupId>${groupId}</groupId> <artifactId>${rootArtifactId}-model</artifactId> <version>${version}</version> </dependency> </dependencies> </dependencyManagement>
子模塊所需依賴都定義在該pom
中,子模塊使用依賴時(shí)不需要<version>
標(biāo)簽
原型文件以web模塊說(shuō)明 就是一個(gè)簡(jiǎn)單的maven工程,里面寫了使用archetype生成模板項(xiàng)目的類
<hr>
附:superman archetype代碼
<hr>
1.下載源碼
git clone https://github.com/TiantianUpup/superman.git
2.打開(kāi)superman工程,將其安裝到本地倉(cāng)庫(kù) 運(yùn)行如下命令
mvn clean install
3.使用自定義archetype初始化項(xiàng)目
mvn archetype:generate -DgroupId=com.h3t.test -DartifactId=superman-demo -Dversion=1.0.0-SNAPSHOT -DarchetypeGroupId=com.h3t.study -DarchetypeArtifactId=superman -DarchetypeVersion=0.0.1-SNAPSHOT -X -DarchetypeCatalog=local
參數(shù)說(shuō)明
-DgroupId
組ID,默認(rèn)項(xiàng)目的包名的組ID相同
DartifactId
:項(xiàng)目唯一標(biāo)識(shí)符,即項(xiàng)目名稱
-DarchetypeGroupId
:superman的組ID,值不需要進(jìn)行修改
-DarchetypeArtifactId
:superman的artifactId,值不需要進(jìn)行改變
4.移動(dòng)配置文件 因?yàn)槭褂?code>archetype生成項(xiàng)目時(shí)會(huì)將resource
下面的文件丟失,所以目前將配置文件放在了web
模塊下的resource
包下,創(chuàng)建項(xiàng)目成功后需手動(dòng)將文件移動(dòng)到web
模塊下的resource
文件夾下,并將resource
文件成標(biāo)記成Resources Root
5.修改resource文件夾下的配置文件 該文件夾下有application.properties
,logback.properties
,logback-spring.xml
三個(gè)配置文件
application.properties
配置文件的修改 application.properties
主要是Spring
、MyBatisPlus
和數(shù)據(jù)庫(kù)的配置信息
spring.datasource.url=jdbc:mysql://localhost:3306/your_database?characterEncoding=UTF8&serverTimezone=UTC spring.datasource.username=root spring.datasource.password=your password
修改數(shù)據(jù)庫(kù)、密碼,默認(rèn)用戶名為root
mybatis-plus.mapper-locations=classpath*:/mapper/*.xml # mybatis-plus.type-aliases-package=
指定MybatisPlus
實(shí)體類別名的包,即model
模塊的po
層包名,默認(rèn)MybatiPlus
的mapper
文件保存在resource
下的mapper
文件夾下,可自行修改
logback.properties
配置文件的修改 logback.properties
定義了error
級(jí)別日志和info
級(jí)別日志的保存地址
LOG_ERROR_HOME= LOG_INFO_HOME=
logback-spring.xml
配置文件的修改 logback-spring.xml
主要是日志輸出規(guī)則的定義,若為windows
系統(tǒng)無(wú)需進(jìn)行修改,若為linux os
或mac os
,則需修改日志保存地址
<fileNamePattern>${LOG_ERROR_HOME}//%d.log</fileNamePattern>
將//
修改為/
6 使用代碼生成器生成controller
、service
、dao
、po
層代碼 代碼生成器類位于service
模塊下的generator
包下,只需要初始化幾個(gè)字段值運(yùn)行就可以生成相應(yīng)的代碼。在運(yùn)行前首先在項(xiàng)目根目錄下創(chuàng)建一個(gè)mp-generator-output
文件夾,該文件夾的名字和OUTPUT_DIR
字段值保持一致
PACKAGE_NAME
生成代碼的包名,和項(xiàng)目的包名一致,負(fù)責(zé)復(fù)制過(guò)去代碼會(huì)有一些小問(wèn)題 -OUTPUT_DIR
生成代碼保存文件地址,默認(rèn)保存在項(xiàng)目下的mp-generator-output
文件夾下,可以修改為自定義保存地址
AUTHOR
注釋中作者的名字
DRIVER_NAME
數(shù)據(jù)庫(kù)驅(qū)動(dòng)
HOST
數(shù)據(jù)庫(kù)主機(jī)號(hào)
PORT
數(shù)據(jù)庫(kù)端口
DATABASE
數(shù)據(jù)庫(kù)名字
USERNAME
數(shù)據(jù)庫(kù)用戶名
PASSWORD
數(shù)據(jù)庫(kù)密碼
7.將生成的代碼移動(dòng)到對(duì)應(yīng)模塊對(duì)應(yīng)包下
impl
對(duì)應(yīng)實(shí)體類接口實(shí)現(xiàn)類
controller
文件夾
實(shí)體類對(duì)應(yīng)的Controller
,將該目錄下的類移到web
模塊下的controller
包下
mapper
文件夾 實(shí)體類對(duì)應(yīng)的DAO
層,該目錄下包含xml
文件和對(duì)應(yīng)實(shí)體的接口類,將xml文
件移到dao
模塊resource
下的mapper
文件夾下,需自行建立mapper
文件夾,將接口移到dao
模塊下的mapper
包下并在接口類上添加@Mapper
注解,需自行建立 mapper
包。同時(shí)將resource文件夾標(biāo)記成Resources root
service
對(duì)應(yīng)實(shí)體類接口
將service
目錄下的接口移到service
模塊下的service
包下,impl
目錄下的類移到service
模塊下的service.impl
包下
po文件夾 將該目錄下的類移到model
模塊下的po
包下,并修改繼承關(guān)系,統(tǒng)一繼承BasePO
類,因?yàn)?code>BasePO類 包含了id
、gmtCreate
、gmtModified
、deleted
這些數(shù)據(jù)庫(kù)基本字段,需將生成的實(shí)體類手動(dòng)刪除這些重復(fù)字段。同時(shí)自動(dòng)生成的po
類缺失了@TableName
、@TableField
注解需手動(dòng)補(bǔ)充。注解的使用方式可參考BasePO
類
8.修改web
模塊aspect
包下的環(huán)繞通知
@Around("execution(* yourpackage.controller..*(..))")
該切面主要用于攔截controller層返回的結(jié)果,將其封裝成統(tǒng)一結(jié)果返回
9 啟動(dòng)項(xiàng)目
web
模塊下的Runner
類為啟動(dòng)類,運(yùn)行該類即可啟動(dòng),默認(rèn)端口為8081
感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“如何自定義archetype”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來(lái)學(xué)習(xí)!
免責(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)容。