欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

使用 Maven Archetype 创建 Java 项目模板

程序员文章站 2022-05-16 21:36:41
...

本文来自于【阿里云官方镜像站:https://developer.aliyun.com/mirror/?utm_content=g_1000307095 】

原文链接:https://developer.aliyun.com/article/757667?spm=a2c6h.12873581.0.0.484f7e46SbqQDx

镜像下载、域名解析、时间同步请点击 阿里巴巴开源镜像站

一、概述

Archetype是一个Maven项目模板工具包。原型被定义为一种原始的模式或模型,所有其他同类的东西都是从中产生的。当我们试图提供一个提供生成Maven项目的一致方法的系统时,这个名字就合适了。Archetype将帮助作者为用户创建Maven项目模板,并为用户提供生成这些项目模板的参数化版本的方法。

使用原型提供了一种很好的方法,可以与您的项目或组织所采用的最佳实践一致的方式快速地使开发人员受益。您可能希望在组织内部实现J2EE开发的标准化,因此您可能希望提供EJB,WAR或Web服务的原型。一旦创建了这些原型并将其部署在组织的存储库中,组织中的所有开发人员就可以使用它们。

二、操作步骤

我们将使用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来创建以该项目为基础的模板。

1. 生成模板文件夹

执行以下maven命令:

mvn archetype:create-from-project

此时项目中会生成target/generated-sources/archetype文件夹,其中存放的就是我们的模板相关文件。

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原型插件自动处理的结果,到时候我们根据原型生成项目的时候,这些占位符就会变成我们新生成项目的相关的值。类似,maven还提供了groupId,artifactId, version等关键字。如果我们项目中有其他地方也需要这种定制化,我们可以手动进行更改。

例如我们把项目配置文件改为如下(应用名用占位符代替),目的是实现项目的名称随新建的项目变动。

接下来来分析archetype-metadata.xml,他是原型描述符号,我们可以指定那些文件进入原型里,那些文件需要排除,还能指定上面说的占位符需不需要被替换 等等。

如下为archetype-metadata.xml示例:

<?xml version="1.0" encoding="UTF-8"?><archetype-descriptor xsi:schemaLocation="https://maven.apache.org/plugins/maven-archetype-plugin/archetype-descriptor/1.1.0">

<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>**/*.xml</include>

</includes>

</fileSet>

<fileSet filtered="true" encoding="UTF-8">

<directory>src/main/resources</directory>

<includes>

<include>**/*.yml</include>

</includes>

</fileSet>

<!--下面还有更多项-->

说明:

fileSet 属性标签指定的那些文件需要纳入原型中,我们把不需要的删掉。

filtered 属性标签表示是否替换文件中的占位符,若为true则会替换,否则不会,所以我们如果想要占位符最后会被替换为项目相关的信息,还需要通过这个标签指定。

packaged 属性标签指定文件是否在项目的包里面,true或false。

3. 生成模板(原型)

我们进入target/generated-sources/archetype目录,执行以下命令:

mvn install

此时模板将在我们本地生成。

4. 使用模板(原型)生成新项目

我们使用以下命令:

mvn archetype:generate \

-DarchetypeCatalog=local \

-DgroupId=新建项目的groupId \

-DartifactId=新建项目的artifactId \

-DarchetypeGroupId=你的原型group \

-DarchetypeArtifactId=你的原型项目名字-archetype \

-DarchetypeVersion=你的原型版本 \

-DinteractiveMode=false

之后,我们会生成新项目。项目的结构符合我们的原型结构。查看我们手动指定的application.yml

此时,可以看到我们的占位符已经被我们项目的相关信息给替换了。

5. 将模板上传至maven仓库

我们进入target/generated-sources/archetype目录,打开pom.xml

添加仓库信息:

<distributionManagement>

<repository>

<id>my-releases</id>

<url>你的仓库地址</url>

</repository>

<snapshotRepository>

<id>my-snapshots</id>

<url>你的仓库地址</url>

</snapshotRepository></distributionManagement>

<servers>

<server>

<id>my-snapshots</id>

<username>对应仓库的username</username>

<password>对应仓库的password</password>

</server>

<server>

<id>my-releases</id>

<username>对应仓库的username</username>

<password>对应仓库的password</password>

</server></servers>

然后指定如下命令:

mvn deploy

随后,原型将被上传至你的mavne仓库。