1.over view
简而言之,Archetype是一个Maven项目模板工具包。原型被定义为一种原始的模式或模型,所有其他同类的东西都是从中产生的。当我们试图提供一个提供生成Maven项目的一致方法的系统时,这个名字就合适了。Archetype将帮助作者为用户创建Maven项目模板,并为用户提供生成这些项目模板的参数化版本的方法。
使用原型提供了一种很好的方法,可以与您的项目或组织所采用的最佳实践一致的方式快速地使开发人员受益。您可能希望在组织内部实现J2EE开发的标准化,因此您可能希望提供EJB,WAR或Web服务的原型。一旦创建了这些原型并将其部署在组织的存储库中,组织中的所有开发人员就可以使用它们。
2.do it
⚠️:我们将使用springboot项目来演示如何生成一个maven archetype(原型),本文中(模板)(原型)交替使用,二者意思相同。
示例,我们有一个现成的项目,其结构如下:
.
├── Dockerfile
├── README.md
├── last-demo.iml
├── mvnw
├── mvnw.cmd
├── pom.xml
├── src
├── main
│ ├── java
│ │ └── com
│ │ └── demo
│ │ └── data
│ │ ├── Application.java
│ │ └── your_business_package
│ │ ├── client
│ │ │ └── DemoClient.java
│ │ ├── constants
│ │ │ └── YourBusinessConstants.java
│ │ ├── enumerate
│ │ │ └── DemoStatus.java
│ │ ├── presistence
│ │ │ ├── DemoRepository.java
│ │ │ └── entity
│ │ │ └── DemoDO.java
│ │ ├── service
│ │ │ └── DemoService.java
│ │ └── web
│ │ ├── dto
│ │ │ └── DemoDTO.java
│ │ └── rest
│ │ └── DemoController.java
│ └── resources
│ ├── application.yml
│ └── logback-spring.xml
└── test
├── java
│ └── com
│ └── demo
│ └── data
│ └── ApplicationTests.java
└── resources
└── application.yml
我们将使用maven archetype来创建以该项目为基础的模板。
2.1 生成模板文件夹
执行以下maven命令:
mvn archetype:create-from-project
此时项目中会生成target/generated-sources/archetype文件夹,其中存放的就是我们的模板相关文件。
2.2 自定义模板
探索target/generated-sources/archetype我们可以得知:
generated-sources
└── archetype
├── pom.xml
├── src
│ ├── main
│ │ └── resources
│ │ ├── META-INF
│ │ │ └── maven
│ │ │ └── archetype-metadata.xml ##⚠️原型描述符,描述了我们原型的结构
│ │ └── archetype-resources ##⚠️经过maven转换后的项目文件包
│ └── test
│ └── resources
│ └── projects
│ └── basic
└── target
├── classes
│ └── archetype-resources
├── your_project_name.jar
└── test-classes
└── projects
└── basic
我们随机打开一个archetype-resources中的源文件,可以看到如下:
上图中我们看到的${package}占位符,这个就是maven原型插件自动处理的结果,到时候我们根据原型生成项目的时候,这些占位符就会变成我们新生成项目的相关的值