說說如何使用 Maven Archetype 來建立項目模版,從項目模塊結構上,統一開發規範java
瞭解 maven 的同窗,應該使用過以下命令來構建一個空的 maven
項目骨架spring
mvn archetype:generate -DgroupId=net.fabself.app -DartifactId=myapp -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
這裏咱們看到下面的參數就是用於指定了一種空的項目骨架原型名稱shell
-DarchetypeArtifactId=maven-archetype-quickstart
有興趣能夠關注一下 http://repo.maven.apache.org/maven2/archetype-catalog.xml 這裏是 maven 默認的原型列表數據庫
*下面開始建立一套自定義項目骨架原型,並集成 spring-boot *apache
以 trade 項目爲例,創建以下模塊結構:springboot
trade ├── trade-access-launcher ├── trade-common ├── trade-dao ├── trade-schedule-launcher ├── trade-service
springMVC 啓動模塊,用於服務接口發佈app
調度服務啓動模塊,用於定時任務框架
通用接口 & 工具模塊maven
業務邏輯服務層模塊spring-boot
數據庫訪問層模塊
基於以上項目結構,開始建立項目 Archetype
fabself-archetype-springboot ├── pom.xml └── src └── main └── resources ├── META-INF │ └── maven │ └── archetype-metadata.xml └── archetype-resources ├── __rootArtifactId__-access-launcher │ ├── pom.xml │ └── src │ ├── main │ │ ├── java │ │ └── resources │ └── test │ ├── java │ └── resources ├── __rootArtifactId__-common │ └── pom.xml ├── __rootArtifactId__-dao │ ├── pom.xml │ └── src │ ├── main │ │ └── java │ └── test ├── __rootArtifactId__-schedule-launcher │ ├── pom.xml │ └── src │ └── main │ └── java ├── __rootArtifactId__-service │ ├── pom.xml │ └── src │ └── main │ └── java ├── pom.xml
注意: 這裏子模塊目錄命名以 __rootArtifactId__
爲前綴,用於動態指定 artifactId
進行替換。
<?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 "> <modelVersion>4.0.0</modelVersion> <groupId>net.fabself.archetype</groupId> <artifactId>fabself-archetype-springboot</artifactId> <version>1.0.0-SNAPSHOT</version> </project>
archetype-metadata.xml
中用於定義這個項目骨架中元數據,文件拷貝,過濾規則
整個拷貝過來,便於你們使用:
<?xml version="1.0" encoding="UTF-8" ?> <archetype-descriptor xsi:schemaLocation="http://maven.apache.org/plugins/maven-archetype-plugin/archetype-descriptor/1.0.0" xmlns="http://maven.apache.org/plugins/maven-archetype-plugin/archetype-descriptor/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="app-root"> <requiredProperties> <requiredProperty key="title"> <!--自定義屬性--> <defaultValue>API</defaultValue> </requiredProperty> </requiredProperties> <modules> <module id="${rootArtifactId}-access-launcher" dir="__rootArtifactId__-access-launcher" name="${rootArtifactId}-access-launcher"> <fileSets> <fileSet filtered="true" encoding="UTF-8" packaged="true"> <directory>src/main/java</directory> <includes> <include>**/*.**</include> </includes> </fileSet> <fileSet filtered="false" encoding="UTF-8" packaged="false"> <directory>src/main/resources</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 filtered="true" encoding="UTF-8" packaged="false"> <directory>src/test/resources</directory> <includes> <include>**/*.**</include> </includes> </fileSet> <fileSet filtered="true" encoding="UTF-8"> <directory></directory> <includes> <include>pom.xml</include> </includes> </fileSet> </fileSets> </module> <module id="${rootArtifactId}-schedule-launcher" dir="__rootArtifactId__-schedule-launcher" name="${rootArtifactId}-schedule-launcher"> <fileSets> <fileSet filtered="true" encoding="UTF-8" packaged="true"> <directory>src/main/java</directory> <includes> <include>**/*.**</include> </includes> </fileSet> <fileSet filtered="false" encoding="UTF-8" packaged="false"> <directory>src/main/resources</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 filtered="true" encoding="UTF-8" packaged="false"> <directory>src/test/resources</directory> <includes> <include>**/*.**</include> </includes> </fileSet> <fileSet filtered="true" encoding="UTF-8"> <directory></directory> <includes> <include>pom.xml</include> </includes> </fileSet> </fileSets> </module> <module id="${rootArtifactId}-common" dir="__rootArtifactId__-common" name="${rootArtifactId}-common"> <fileSets> <fileSet filtered="true" encoding="UTF-8" packaged="true"> <directory>src/main/java</directory> <includes> <include>**/*.**</include> </includes> </fileSet> <fileSet filtered="false" encoding="UTF-8" packaged="false"> <directory>src/main/resources</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 filtered="true" encoding="UTF-8" packaged="false"> <directory>src/test/resources</directory> <includes> <include>**/*.**</include> </includes> </fileSet> <fileSet filtered="true" encoding="UTF-8"> <directory></directory> <includes> <include>pom.xml</include> </includes> </fileSet> </fileSets> </module> <module id="${rootArtifactId}-dao" dir="__rootArtifactId__-dao" name="${rootArtifactId}-dao"> <fileSets> <fileSet filtered="true" encoding="UTF-8" packaged="true"> <directory>src/main/java</directory> <includes> <include>**/*.**</include> </includes> </fileSet> <fileSet filtered="false" encoding="UTF-8" packaged="false"> <directory>src/main/resources</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 filtered="true" encoding="UTF-8" packaged="false"> <directory>src/test/resources</directory> <includes> <include>**/*.**</include> </includes> </fileSet> <fileSet filtered="true" encoding="UTF-8"> <directory></directory> <includes> <include>pom.xml</include> </includes> </fileSet> </fileSets> </module> <!--id:定義模塊 ArtifactId; dir: 模塊骨架目錄; --> <module id="${rootArtifactId}-service" dir="__rootArtifactId__-service" name="${rootArtifactId}-service"> <fileSets> <!--fileter:設置是否進行${}取值匹配; package:設置是否將 package 指定目錄結構複製到代碼中 --> <fileSet filtered="true" encoding="UTF-8" packaged="true"> <directory>src/main/java</directory> <includes> <include>**/*.**</include> </includes> </fileSet> <fileSet filtered="false" encoding="UTF-8" packaged="false"> <directory>src/main/resources</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 filtered="true" encoding="UTF-8" packaged="false"> <directory>src/test/resources</directory> <includes> <include>**/*.**</include> </includes> </fileSet> <fileSet filtered="true" encoding="UTF-8"> <directory></directory> <includes> <include>pom.xml</include> </includes> </fileSet> </fileSets> </module> </modules> </archetype-descriptor>
package ${package}; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import springfox.documentation.swagger2.annotations.EnableSwagger2; /** * */ @SpringBootApplication @EnableSwagger2 public class App { public static void main(String[] args) { SpringApplication.run(App.class, args); } }
安裝
mvn clean install
使用如下命令就能夠開始建立本身的項目框架了
mvn archetype:generate -DarchetypeGroupId=net.fabself.archetype -DarchetypeArtifactId=fabself-archetype-springboot -DarchetypeVersion=1.0.0-SNAPSHOT -DarchetypeCatalog=local
在此框架下,能夠繼續擴展代碼模版