雖然maven已經(jīng)提供了maven-archetype-webapp、maven-archetype-quickstart等項目骨架幫助我們快速構(gòu)建項目架構(gòu),但是默認提供的archetype初始化的項目架構(gòu)并不能滿足開發(fā)需求,這時候就有必要自己寫一個滿足項目需求的archetype了
使用自定義archrtype生成的項目結(jié)構(gòu)圖
為了激發(fā)閱讀興趣,先放一張使用自定義archetype生成項目的項目結(jié)構(gòu)圖

基本上的類都是
archetype生成的
archetype是什么
可以簡單的理解為模板工具類,通過archetype我們可以快速的生成項目的基本架構(gòu)。比如我們使用idea創(chuàng)建一個maven web項目時,常常會選擇maven-archetype-webapp模板來初始化項目,使用maven-archetype-webapp生成的項目中包括webapp目錄,里面包含web的配置文件

archetype的組成
要想寫一個自定義archetype,首先得知道一個archetype的組成。archetype由四部分組成:
-
prototype files原型文件
位于src/main/resources/archetype-resource目錄下。prototype files原型文件可以理解為多模塊中的子模塊或是單模塊工程中的源文件[即src文件]。這些原型文件在使用對應archetype生成項目時被生成 -
archetype-metadata.xml
位于src/main/resources/META-INF/maven/目錄下。該配置文件中主要列出了原型文件以及使用archetype生成模板工程需要的參數(shù) -
prototype pom
位于src/main/resources/archetype-resources目錄下。這個pom文件會出現(xiàn)在archetype創(chuàng)建的模板工程中,如果是單模塊工程,則是對整個項目的依賴管理;如果是多模塊工程,該pom是總pom文件,該文件中會定義項目的子模塊以及對子模塊的依賴進行管理等,子模塊pom定義在子模塊下,子模塊pom文件只管理子模塊的依賴。 -
archetype pom
位于自定義archetype工程的根目錄下。這是archetype工程項目的pom文件,里面一般沒什么東西,不會出現(xiàn)在archetype創(chuàng)建的模板工程中
superman[自定義archetype]結(jié)構(gòu)說明
-
superman項目結(jié)構(gòu)圖
包含了archetype的四個組成部分,兩個pom文件,一個archtype-metadata文件和五個原型文件[__rootArtifactId__-*],其中__rootArtifactId__在生成模板工程時會被傳入的值替代 - archtype-metadata配置文件
- 1.定義使用
archetype生成模板工程需要傳入的參數(shù)
<!--需要輸入的屬性--> <requiredProperties> <requiredProperty key="groupId"> <!--默認的groupId--> <defaultValue>com.h2t.test</defaultValue> </requiredProperty> <requiredProperty key="artifactId"> <!--默認的artifactId--> <defaultValue>demo</defaultValue> </requiredProperty> <requiredProperty key="package"> <!--默認的包名和groupId一樣--> <defaultValue>${groupId}</defaultValue> </requiredProperty> </requiredProperties>${}標識的變量都是通過maven中的命令行傳進來的- 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里對應的directory
name:子模塊的名字. - 1.定義使用
- prototype pom文件
- 1.定義了五個子模塊
<!--項目子模塊--> <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中,子模塊使用依賴時不需要<version>標簽 - 原型文件以web模塊說明
就是一個簡單的maven工程,里面寫了使用archetype生成模板項目的類
快速開始【superman archetype使用指南】
- 1.下載源碼
git clone https://github.com/TiantianUpup/superman.git
- 2.打開superman工程,將其安裝到本地倉庫
運行如下命令
mvn clean install
- 3.使用自定義archetype初始化項目
mvn archetype:generate
-DgroupId=com.h2t.test
-DartifactId=superman-demo
-Dversion=1.0.0-SNAPSHOT
-DarchetypeGroupId=com.h2t.study
-DarchetypeArtifactId=superman -DarchetypeVersion=0.0.1-SNAPSHOT -X -DarchetypeCatalog=local
參數(shù)說明
-DgroupId組ID,默認項目的包名的組ID相同
DartifactId:項目唯一標識符,即項目名稱
-DarchetypeGroupId:superman的組ID,值不需要進行修改
-DarchetypeArtifactId:superman的artifactId,值不需要進行改變
4.移動配置文件
因為使用archetype生成項目時會將resource下面的文件丟失,所以目前將配置文件放在了web模塊下的resource包下,創(chuàng)建項目成功后需手動將文件移動到web模塊下的resource文件夾下,并將resource文件成標記成Resources Root-
5.修改resource文件夾下的配置文件
該文件夾下有application.properties,logback.properties,logback-spring.xml三個配置文件-
application.properties配置文件的修改
application.properties主要是Spring、MyBatisPlus和數(shù)據(jù)庫的配置信息
spring.datasource.url=jdbc:mysql://localhost:3306/your_database?characterEncoding=UTF8&serverTimezone=UTC spring.datasource.username=root spring.datasource.password=your password修改數(shù)據(jù)庫、密碼,默認用戶名為
rootmybatis-plus.mapper-locations=classpath*:/mapper/*.xml # mybatis-plus.type-aliases-package=指定
MybatisPlus實體類別名的包,即model模塊的po層包名,默認MybatiPlus的mapper文件保存在resource下的mapper文件夾下,可自行修改-
logback.properties配置文件的修改
logback.properties定義了error級別日志和info級別日志的保存地址
LOG_ERROR_HOME= LOG_INFO_HOME=-
logback-spring.xml配置文件的修改
logback-spring.xml主要是日志輸出規(guī)則的定義,若為windows系統(tǒng)無需進行修改,若為linux os或mac os,則需修改日志保存地址
<fileNamePattern>${LOG_ERROR_HOME}//%d.log</fileNamePattern>將
//修改為/ -
-
6 使用代碼生成器生成
controller、service、dao、po層代碼
代碼生成器類位于service模塊下的generator包下,只需要初始化幾個字段值運行就可以生成相應的代碼。在運行前首先在項目根目錄下創(chuàng)建一個mp-generator-output文件夾,該文件夾的名字和OUTPUT_DIR字段值保持一致-
PACKAGE_NAME
生成代碼的包名,和項目的包名一致,負責復制過去代碼會有一些小問題
-OUTPUT_DIR
生成代碼保存文件地址,默認保存在項目下的mp-generator-output文件夾下,可以修改為自定義保存地址 -
AUTHOR
注釋中作者的名字 -
DRIVER_NAME
數(shù)據(jù)庫驅(qū)動 -
HOST
數(shù)據(jù)庫主機號 -
PORT
數(shù)據(jù)庫端口 -
DATABASE
數(shù)據(jù)庫名字 -
USERNAME
數(shù)據(jù)庫用戶名 -
PASSWORD
數(shù)據(jù)庫密碼
-
-
7.將生成的代碼移動到對應模塊對應包下
controller文件夾
實體類對應的Controller,將該目錄下的類移到web模塊下的controller包下mapper文件夾
實體類對應的DAO層,該目錄下包含xml文件和對應實體的接口類,將xml文件移到dao模塊resource下的mapper文件夾下,需自行建立mapper文件夾,將接口移到dao模塊下的mapper包下并在接口類上添加@Mapper注解,需自行建立mapper包。同時將resource文件夾標記成Resources root-
service對應實體類接口-
impl對應實體類接口實現(xiàn)類
將
service目錄下的接口移到service模塊下的service包下,impl目錄下的類移到service模塊下的service.impl包下 -
po文件夾
將該目錄下的類移到model模塊下的po包下,并修改繼承關(guān)系,統(tǒng)一繼承BasePO類,因為BasePO類 包含了id、gmtCreate、gmtModified、deleted這些數(shù)據(jù)庫基本字段,需將生成的實體類手動刪除這些重復字段。同時自動生成的po類缺失了@TableName、@TableField注解需手動補充。注解的使用方式可參考BasePO類
-
8.修改
web模塊aspect包下的環(huán)繞通知@Around("execution(* yourpackage.controller..*(..))")該切面主要用于攔截controller層返回的結(jié)果,將其封裝成統(tǒng)一結(jié)果返回
-
9 啟動項目
web模塊下的Runner類為啟動類,運行該類即可啟動,默認端口為8081
附:superman archetype生成demo工程地址歡迎fork與star[劃重點],
由于開發(fā)經(jīng)驗有限,有些地方可能考慮不周,歡迎提bug。并且該
archetype只定義了一些基礎(chǔ)功能,歡迎提需求。



