使用 Maven Archetype 创建 Java 项目模板

简介: 本文我们将为大家介绍maven的原型及其特性带来的好处,并且演示如何生成一个原型,以及利用原型来创建一个新项目。

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

一、概述

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中的源文件,可以看到如下:
1.jpg

上图中我们看到的${package}占位符,这个就是maven原型插件自动处理的结果,到时候我们根据原型生成项目的时候,这些占位符就会变成我们新生成项目的相关的值。类似,maven还提供了groupId,artifactId, version等关键字。如果我们项目中有其他地方也需要这种定制化,我们可以手动进行更改。
例如我们把项目配置文件改为如下(应用名用占位符代替),目的是实现项目的名称随新建的项目变动。
2.jpg

接下来来分析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
3.jpg
此时,可以看到我们的占位符已经被我们项目的相关信息给替换了。

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仓库。

阿里巴巴开源镜像站 提供全面,高效和稳定的镜像下载服务。钉钉搜索 ' 21746399 ‘ 加入镜像站官方用户交流群。”

相关文章
|
11天前
|
IDE Java 开发工具
Java系统中的错误码设计问题之为Java项目中的错误消息提供国际化支持如何解决
Java系统中的错误码设计问题之为Java项目中的错误消息提供国际化支持如何解决
22 0
|
14天前
|
Java 应用服务中间件 Windows
【应用服务 App Service】App Service 中部署Java项目,查看Tomcat配置及上传自定义版本
【应用服务 App Service】App Service 中部署Java项目,查看Tomcat配置及上传自定义版本
|
7天前
|
小程序 Java
【aspose-words】Aspose.Words for Java模板语法详细剖析
本文通过详细分析Aspose.Words for Java模板语法,介绍了使用条件块、变量和动态合并表格单元格三个常用模板标签,并结合实际案例进行演示。通过这三个标签的实操,帮助读者更好地掌握Aspose.Words的使用技巧。此外,还提供了官方文档链接以便进一步学习。
38 0
【aspose-words】Aspose.Words for Java模板语法详细剖析
|
5天前
|
Java Apache Maven
Java中使用poi+poi-tl实现根据模板导出word文档
这个过程不仅简化了文档生成的工作,而且保证了生成文档的一致性与准确性,特别适合于那些需要生成大量文档的自动化场景。通过以上步骤,Java开发人员可以实现高效、可靠的Word文档导出功能。
18 0
|
8天前
|
jenkins Java Shell
jenkins学习笔记之十三:配置SonarScanner扫描Java项目
jenkins学习笔记之十三:配置SonarScanner扫描Java项目
|
12天前
|
Java 开发工具 git
【Azure 应用服务】本地Git部署Java项目到App Server,访问无效的原因
【Azure 应用服务】本地Git部署Java项目到App Server,访问无效的原因
|
14天前
|
JavaScript Java Python
【Azure 应用服务】在Azure App Service for Windows 中部署Java/NodeJS/Python项目时,web.config的配置模板内容
【Azure 应用服务】在Azure App Service for Windows 中部署Java/NodeJS/Python项目时,web.config的配置模板内容
|
设计模式 Java
Java 模板设计模式的应用场景
模板设计模式在项目中的应用场景
147 0
|
设计模式 Java
java神秘的抽象类,模板设计模式
1.概述 抽象类不能用来实例化对象,声明抽象类的唯一目的是为了将来对该类进行扩充。 一个类不能同时被 abstract 和 final 修饰。如果一个类包含抽象方法,那么该类一定要声明为抽象类,否则将出现编译错误。 抽象类可以包含抽象方法和非抽象方法。 抽象类一般会被继承,由其子类实现具体的抽象方法👴🏻
93 0
|
设计模式 Java
JAVA 模板设计模式
JAVA 模板设计模式
118 0

推荐镜像

更多
下一篇
DDNS