Maven 自身提供了许多 Archetype 来方便用户创建 Project, 但是每个团队都可能会有一些常用的文件或配置, 为了避免在创建 project 时重复的拷贝和修改, 我们通过自定义 Archetype 来规范显得还蛮有必要, 下面简单介绍下使用 maven-archetype-archetype 来构建自己的 Archetype 的过程.
1, 创建自己的 Archetype 项目
模板
mvn archetype:generate -DarchetypeGroupId=<archetype-groupId> -DarchetypeArtifactId=<archetype-artifactId> -DarchetypeVersion=<archetype-version> -DgroupId=<my.groupid> -DartifactId=<my-artifactId>
例如:
mvn archetype:generate -DgroupId=com.ultrapower.maven.archetypes -DartifactId=springboot-maven-archetype -DarchetypeArtifactId=maven-archetype-archetype -DinteractiveMode=false -X
1) springboot-maven-archetype 下的 pom.xml 和一般的 maven 项目一样用于定义 archetype 项目的坐标等信息
2) springboot-maven-archetype/src/main/resources/archetype-resources 下的所有内容定义了待生成项目的所有文件 (原型文件)
3) springboot-maven-archetype/ src/main/resources/META-INF/maven/archetype.xml 中定义骨架的描述符 (元数据), 这个文件列出了包含在 archetype 中的所有文件并将这些文件分类.
注: springboot-maven-archetype/pom.xml 如下
- <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/maven-v4_0_0.xsd">
- <modelVersion>4.0.0</modelVersion>
- <groupId>com.ultrapower.maven.archetypes</groupId>
- <artifactId>springboot-maven-archetype</artifactId>
- <version>1.0-SNAPSHOT</version>
- <name>Archetype - springboot-maven-archetype</name>
- <url>http://maven.apache.org</url>
- </project>
2, 修改 archetype-resources 下的 pom.xml, 添加需要的配置
如:
- <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/maven-v4_0_0.xsd">
- <modelVersion>4.0.0</modelVersion>
- <groupId>${groupId}</groupId>
- <artifactId>${artifactId}</artifactId>
- <version>${version}</version>
- <packaging>jar</packaging>
- <name>${artifactId}</name>
- <url>http://www.myorganization.org</url>
- <parent>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-parent</artifactId>
- <version>2.0.0.RELEASE</version>
- <relativePath /> <!-- lookup parent from repository -->
- </parent>
- <properties>
- <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
- <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
- <java.version>1.8</java.version>
- </properties>
- <dependencies>
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter</artifactId>
- </dependency>
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-web</artifactId>
- </dependency>
- <dependency>
- <groupId>io.springfox</groupId>
- <artifactId>springfox-swagger2</artifactId>
- <version>2.8.0</version>
- </dependency>
- <dependency>
- <groupId>io.springfox</groupId>
- <artifactId>springfox-swagger-ui</artifactId>
- <version>2.8.0</version>
- </dependency>
- <dependency>
- <groupId>org.apache.commons</groupId>
- <artifactId>commons-lang3</artifactId>
- </dependency>
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <version>3.8.1</version>
- <scope>test</scope>
- </dependency>
- </dependencies>
- </project>
3, 添加需要的文件
例如:
如 Application.java
- package ${package};
- import org.springframework.boot.Banner;
- import org.springframework.boot.SpringApplication;
- import org.springframework.boot.autoconfigure.SpringBootApplication;
- import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
- import org.springframework.boot.autoconfigure.jms.JmsAutoConfiguration;
- import org.springframework.boot.autoconfigure.ORM.jpa.HibernateJpaAutoConfiguration;
- import org.springframework.boot.Web.servlet.FilterRegistrationBean;
- import org.springframework.boot.Web.servlet.ServletComponentScan;
- import org.springframework.context.annotation.Bean;
- import org.springframework.context.annotation.ComponentScan;
- @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class, HibernateJpaAutoConfiguration.class,
- JmsAutoConfiguration.class })
- @ServletComponentScan
- @ComponentScan(basePackages = { "${package}" })
- public class Application {
- public static void main(String[] args) {
- SpringApplication App = new SpringApplication(Application.class);
- App.setBannerMode(Banner.Mode.OFF);
- App.run(args);
- }
- }
4, 修改 archetype.xml 文件
如:
- <archetype xmlns="http://maven.apache.org/plugins/maven-archetype-plugin/archetype/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/plugins/maven-archetype-plugin/archetype/1.0.0 http://maven.apache.org/xsd/archetype-1.0.0.xsd">
- <id>springboot-maven-archetype</id>
- <sources>
- <source encoding="UTF-8">src/main/java/Application.java</source>
- <source encoding="UTF-8">src/main/java/config/beanconfig/MvcConfig.java</source>
- <source encoding="UTF-8">src/main/java/config/beanconfig/CorsConfig.java</source>
- <source encoding="UTF-8">src/main/java/config/beanconfig/RestTemplateConfig.java</source>
- <source encoding="UTF-8">src/main/java/config/beanconfig/Swagger2Config.java</source>
- <source encoding="UTF-8">src/main/java/config/condition/Swagger2Condition.java</source>
- </sources>
- <resources>
- <resource encoding="UTF-8">src/main/resources/application.YAML</resource>
- <resource encoding="UTF-8">src/main/resources/application-dev.YAML</resource>
- <resource encoding="UTF-8">src/main/resources/application-prod.YAML</resource>
- <resource encoding="UTF-8">boot/control.sh</resource>
- <resource encoding="UTF-8">boot/control.bat</resource>
- </resources>
- <testSources>
- <source>src/test/java/AppTest.java</source>
- </testSources>
- </archetype>
上面是将每个文件都列出来了, 还可以使用通配符的方式来简化配置, 例如:
- <archetype xmlns="http://maven.apache.org/plugins/maven-archetype-plugin/archetype/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/plugins/maven-archetype-plugin/archetype/1.0.0 http://maven.apache.org/xsd/archetype-1.0.0.xsd">
- <id>springboot-maven-archetype</id>
- <sources>
- <source encoding="UTF-8">src/main/java/**/*.*</source>
- </sources>
- <resources>
- <resource encoding="UTF-8">**/*.*</resource>
- </resources>
- <testSources>
- <source>src/test/java/AppTest.java</source>
- </testSources>
- </archetype>
5, 安装 archetype
mvn install
6, 使用自定义的 archetype 创建项目
mvn archetype:generate -DarchetypeGroupId=com.ultrapower.maven.archetypes -DarchetypeArtifactId=springboot-maven-archetype -DarchetypeVersion=1.0-SNAPSHOT -DgroupId=com.ultrapower.ioss -DartifactId=springboot-archetype-test -X
注意: 我们可以将 archetype.xml 换成 "archetype-metadata.xml", 以下的内容可以达到同样的效果, 但还是推荐 archetype.xml
- archetype-metadata.xml:
- <?xml version="1.0" encoding="UTF-8"?>
- <archetype-descriptor name="beast-archetype"
- xmlns="http://maven.apache.org/plugins/maven-archetype-plugin/archetype-descriptor/1.0.0"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="
- http://maven.apache.org/plugins/maven-archetype-plugin/archetype-descriptor/1.0.0
- http://maven.apache.org/xsd/archetype-descriptor-1.0.0.xsd">
- <requiredProperties>
- <requiredProperty key="package" />
- </requiredProperties>
- <fileSets>
- <fileSet filtered="true" packaged="true" encoding="UTF-8">
- <directory>src/main/java</directory>
- <includes>
- <include>**/*.java</include>
- </includes>
- </fileSet>
- <fileSet filtered="true" encoding="UTF-8">
- <directory>src/main/resources</directory>
- <includes>
- <include>**/*.*</include>
- </includes>
- </fileSet>
- <fileSet filtered="true" encoding="UTF-8">
- <directory>boot</directory>
- <includes>
- <include>**/*.*</include>
- </includes>
- </fileSet>
- <fileSet filtered="true" packaged="true" encoding="UTF-8">
- <directory>src/test/java</directory>
- <includes>
- <include>**/*.java</include>
- </includes>
- </fileSet>
- <fileSet encoding="UTF-8">
- <directory>src/test/resources</directory>
- <includes>
- <include>**/*.*</include>
- </includes>
- </fileSet>
- </fileSets>
- </archetype-descriptor>
来源: http://www.bubuko.com/infodetail-2927481.html