使用 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 ‘ 加入镜像站官方用户交流群。”

相关文章
|
4天前
|
Java Apache Maven
Maven 项目文档
在 `C:/MVN` 目录下创建 Maven 项目 `consumerBanking` 使用命令:`mvn archetype:generate -DgroupId=com.companyname.bank -DartifactId=consumerBanking -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false`。为解决 `mvn site` 命令执行时的 `NoClassDefFoundError`
|
2天前
|
数据采集 前端开发 Java
Java医院绩效考核系统源码maven+Visual Studio Code一体化人力资源saas平台系统源码
医院绩效解决方案包括医院绩效管理(BSC)、综合奖金核算(RBRVS),涵盖从绩效方案的咨询与定制、数据采集、绩效考核及反馈、绩效奖金核算到科到组、分配到员工个人全流程绩效管理;将医院、科室、医护人员利益绑定;全面激活人才活力;兼顾质量和效益、长期与短期利益;助力医院降本增效,持续改善、优化收入、成本结构。
7 0
|
2天前
|
移动开发 前端开发 Java
STS里的java 工程项目名称修改和目录设置成源代码
STS里的java 工程项目名称修改和目录设置成源代码
|
2天前
|
JavaScript 前端开发 Java
java项目的打包将vue放到.jar里面部署
java项目的打包将vue放到.jar里面部署
|
3天前
|
XML Java 测试技术
Maven 构建 & 项目测试
本文介绍了如何使用Maven构建和测试Java应用。在`C:/MVN/consumerBanking`项目中,`pom.xml`配置了JUnit作为测试框架。执行`mvn clean package`命令进行构建,Maven会清理目标目录,编译源码和测试代码,运行测试用例,最后生成`consumerBanking-1.0-SNAPSHOT.jar`。测试报告位于`surefire-reports`文件夹。添加新Java类`Util.java`到项目后,更新`App.java`以使用`Util`类。
|
5天前
|
缓存 安全 前端开发
来聊聊Java项目分层规范
本文讨论了Java项目的分层规范,强调了分层的重要性以避免代码不易扩展和职责边界模糊。作者分享了阿里提出的六层分层模型(开放接口层、终端显示层、Web层、Service层、Manager层、Mapper层)以及对应的领域模型(DO、DTO、VO、query)。同时,提出了简化版的分层规约,以提高开发效率。作者是CSDN Java博客专家,维护者之一的Java Guide项目,并提供了个人项目结构示例。文章鼓励读者关注其公众号以获取更多交流机会。
20 4
|
5天前
|
Java 项目管理 Maven
【揭秘】Maven聚合与继承:如何轻松实现项目依赖管理?
Maven的聚合和继承是Java开发中重要的概念。聚合允许将多个项目组合成一个构建单元,简化多模块项目的构建过程,提高构建效率。继承则让子项目重用父项目的配置和属性,避免了重复定义,增强了项目的一致性和可维护性。通过聚合和继承,Maven为多模块项目的构建和管理提供了高效且灵活的支持,减少了配置冗余,提升了开发效率。
【揭秘】Maven聚合与继承:如何轻松实现项目依赖管理?
|
5天前
|
Java
springboot项目出现Exception in thread “main“ java.lang.NoClassDefFoundError: javax/servlet/Filter
springboot项目出现Exception in thread “main“ java.lang.NoClassDefFoundError: javax/servlet/Filter
12 0
|
6天前
|
Java Maven
Maven 项目文档
学习Maven项目文档创作,借助Doxia引擎将内容转化为通用模型。支持Apt(纯文本)、Xdoc(Maven 1.x格式)、FML(FAQ)和XHTML。
|
7天前
|
Java Apache Maven
Maven 项目文档Maven 项目文档
Maven使用Doxia引擎将多种格式(如Apt、Xdoc、FML和XHTML)转换为通用文档模型。在创建Maven项目文档时,例如在C:/MVN下创建consumerBanking项目,需运行指定的mvn archetype:generate命令。接着,更新pom.xml,确保包含maven-site-plugin和maven-project-info-reports-plugin的最新版本(至少3.3和2.7),以避免NoClassDefFoundError。执行`mvn site`命令生成文档。

推荐镜像

更多