Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >架构师必备技能:Maven Archetype生成项目模板

架构师必备技能:Maven Archetype生成项目模板

作者头像
码农小胖哥
发布于 2021-09-09 03:12:20
发布于 2021-09-09 03:12:20
4.4K02
代码可运行
举报
运行总次数:2
代码可运行
基本每个公司的项目都有一套模板,只要开新项目直接复制一份改改包名和一些配置就初始化了一个新项目。这种方式有点繁琐,有没有通过命令甚至是可视化的方式从一个模板项目初始化项目。Maven其实有提供这种能力,这就是基于原型(Archetype)的生成项目。

集成项目模板插件

首先需要在模板项目中集成Maven原型插件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-archetype-plugin</artifactId>
                <version>3.2.0</version>
            </plugin>

从项目生成模板

从项目生成模板只需要三步。

生成模板原型文件

Maven插件允许我们从已有项目生成一个模板项目。在项目根目录下执行mvn archetype:create-from-project命令即可将该项目生成一个项目模板,生成的项目原型被保存在路径target/generated-sources/archetype下。

但是这个存在一个问题,一些和项目模板源码无关的文件也会被加入模板中,比如IDEA中的.iml文件、.idea目录下的文件。这些“垃圾”文件需要在生成模板时被忽略。

maven-archetype-plugin提供了一个属性配置可以帮助我们实现该能力。在原始项目的根目录(或者你喜欢的其它目录)编写一个.properties文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 原型的坐标 必须声明
archetype.groupId=cn.felord
# 最好按照约定以-archetype结尾
archetype.artifactId=template-archetype
archetype.version=1.0
# 需要忽略的文件夹和文件类型 英文逗号隔开
excludePatterns=**/.idea/**,**/*.iml

这时候执行生成的命令就需要指定该配置文件了:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mvn archetype:create-from-project -Darchetype.properties=./archetype.properties

❝注意:路径为配置文件和根目录的相对路径。

这样生成的原型就忽略掉那些无用的文件了。细心的同学会发现生成原型中的pom.xml的坐标变成了:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<groupId>cn.felord</groupId>
<artifactId>template-archetype</artifactId>
<version>1.0</version>
<packaging>maven-archetype</packaging>

<name>template-archetype</name>

安装生成的原型

我们需要跳转的target/generated-sources/archetype下执行mvn install

安装原型库到本地

在我们本地maven repository目录(通常是~/.m2)下会把当前原型注册到archetype-catalog.xml中:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?xml version="1.0" encoding="UTF-8"?>
<archetype-catalog xsi:schemaLocation="http://maven.apache.org/plugins/maven-archetype-plugin/archetype-catalog/1.0.0 http://maven.apache.org/xsd/archetype-catalog-1.0.0.xsd"
    xmlns="http://maven.apache.org/plugins/maven-archetype-plugin/archetype-catalog/1.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <archetypes>
    <archetype>
      <groupId>cn.felord</groupId>
      <artifactId>template-archetype</artifactId>
      <version>1.0</version>
      <description>spring security learning demo</description>
    </archetype>
  </archetypes>
</archetype-catalog>

后续使用时maven会从这里检索我们本地的模板。

利用原型生成项目

接下来验证一下效果,从本地原型生成项目需要执行:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mvn archetype:generate -DarchetypeCatalog=local

创建项目步骤都在这里

然后一个新项目就诞生了。

分享模板

模板分享基于Maven远程仓库,首先你要在你的setting.xml中配置一个远程仓库并且拥有deploy的权限。然后在target/generated-sources/archetype下执行mvn deploy就行了。这里有两种方式来使用远程的原型模版。

IDEA添加Maven原型模板

点击New Project然后选择Maven,勾选Create from archetype点击Add Archetype弹出对话框:

IDEA添加原型模板

然后模板就被添加到模板列表了,选中添加的模板点击下一步就可以使用了。

命令行

就像使用本地原型创建项目一样,这里给你一套命令执行就可以了:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mvn archetype:generate \
 -DgroupId=cn.felord.demo    \
 -DartifactId=demo-project   \
 -Dversion=1.0.0       \
 -Dpackage=cn.felord.demo   \
 -DarchetypeGroupId=cn.felord  \
 -DarchetypeArtifactId=template-archetype  \
 -DarchetypeVersion=1.0  \
 -DinteractiveMode=false    

❝如果你想通过交互命令生成,就把前三个选项和最后一个DinteractiveMode去掉试试。

不要忘了把下面的远程仓库配置到setting.xml;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  <repository>
    <id>archetype</id>
     <!-- 仓库地址 -->  
    <url>https://repository.domain.com/path/to/repo/</url>
  </repository>
  
  <!-- 仓库的认证信息 -->
  <server>
    <id>archetype</id>
    <username>repousername</username>
    <password>xxx.felord.cn</password>
  </server>

项目模版生成在项目研发中很重要,可以让我们的项目能保持一致性,也方便后续转微服务或者维护升级,是每一个立志成为Java架构师的开发者必备的一个技能。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-08-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 码农小胖哥 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Maven Archetype 多 Module 自定义代码脚手架
大部分公司都会有一个通用的模板项目,帮助你快速创建一个项目。通常,这个项目需要集成一些公司内部的中间件、单元测试、标准的代码格式、通用的代码分层等等。
艾小仙
2022/01/24
1.2K0
Maven Archetype 多 Module 自定义代码脚手架
Maven私服搭建及自定义Archetype(骨架)
通过私服MAVEN能够更有效的管理自己的依赖包,像阿里云的短信jar包等第三方的依赖包,很多公服是没有的,在比如MAVEN是不支持多个仓库下载的,但是可以配置多个仓库。在私服上就可以解决以上问题。
Vincent-yuan
2021/12/08
1.4K0
Maven私服搭建及自定义Archetype(骨架)
基于maven的项目脚手架,一键创建项目的项目模板
Springboot的出现极大的简化了项目开发的配置,然而,到真实使用的时候还是会有一堆配置需要设定。比如依赖管理,各种插件,质量扫描配置,docker配置,持续集成配置,设置业务独特的架构配置等。这时候,如果创建一个包含这一切的脚手架,当需要创建项目的时候,只要create就好了。
Ryan-Miao
2019/07/03
2.2K0
基于maven的项目脚手架,一键创建项目的项目模板
手写Maven的archetype项目脚手架
  maven是一个很好的代码构建工具,采用“约定优先于配置”的原则进行项目管理,相信很多的java开发者应该都了解maven并可能在工作当中都是通过maven来管理项目的,在创建的项目的时候,我们往往会使用maven内置的项目骨架也就是archetype来快速生成项目结构。但是在一个团队做开发的过程中,可能仅仅依靠maven预先提供的archetyp可能是不够的,团队之间协作有自己的定义方式,每个人的结构定义风格也不尽相同,在这样的背景下我们有必要去定义一个统一的代码骨架供团队使用,这样做的好处是当团队需要开始一个新项目的时候,可以利用自定义的maven骨架一键生成项目。
阿豪聊干货
2018/08/09
1.8K0
手写Maven的archetype项目脚手架
Mavan:自定义骨架及工程初始化
最近在看低代码平台和流水线相关的一些东西,看到一些平台会提供自动生成代码库的能力,顺藤摸瓜,正好回顾一下maven的能力,并在这里做一些尝试和验证。
程序员架构进阶
2022/12/01
8690
Mavan:自定义骨架及工程初始化
基于start.spring.io,我实现了Java脚手架定制
2020 年,我们公司迎来了业务发展的迅猛期,滋生大量创建工程的需求。总体来说,创建工程面临着以下几个问题。
杨同学technotes
2022/12/01
1.2K0
老大说新项目的结构和 xxx 项目一样就可以了,我 ……
" 又要开发新项目了,还是创建新项目,怎么办?老大说按照 xxx 项目的结构创建一个新项目就可以了…… "
程序员小航
2020/11/23
8300
老大说新项目的结构和 xxx 项目一样就可以了,我 ……
自定义maven项目结构-maven archtype
背景 经常使用同一套类似的工程结构,就想着能不能自动构建,不用每次都进行工程结构的拷贝,另外呢也是想建立一套项目工程结构的规范,运用技术代替人工
shengjk1
2018/12/27
1K0
基于领域模型构建多模块项目骨架
互联网发展到现在,从刚开始的单体单机架构到现在的分布式微服务架构,虽然带来了不胜枚举的好处和便利,但是也让新应用的或者新业务板块的搭建增加了游戏难度,举个具体的场景,应用经过应用模块细分和代码分层后大致变成了这个样子:
叔牙
2020/11/19
1.8K0
基于领域模型构建多模块项目骨架
使用Maven Archetype创建Java项目模板
简而言之,Archetype是一个Maven项目模板工具包。原型被定义为一种原始的模式或模型,所有其他同类的东西都是从中产生的。当我们试图提供一个提供生成Maven项目的一致方法的系统时,这个名字就合适了。Archetype将帮助作者为用户创建Maven项目模板,并为用户提供生成这些项目模板的参数化版本的方法。
东溪陈姓少年
2020/08/06
1.4K0
Maven快速学习教程
在开发中经常需要依赖第三方的包,包与包之间存在依赖关系,版本间还有兼容性问题,有时还里要将旧的包升级或降级,当项目复杂到一定程度时包管理变得非常重要。
张果
2018/10/09
2.5K0
Maven快速学习教程
Maven介绍,包括作用、核心概念、用法、常用命令、扩展及配置
两年半前写的关于Maven的介绍,现在看来都还是不错的,自己转下。写博客的一大好处就是方便自己以后查阅,自己总结的总是最靠谱的。
bear_fish
2018/09/19
3.8K0
Maven介绍,包括作用、核心概念、用法、常用命令、扩展及配置
项目管理与构建——Maven
Maven下载地址http://maven.apache.org/download.cgi
羊羽shine
2019/05/29
7200
我把公司 10 年老系统改造 Maven,真香!!
公司有几个老古董项目,应该是 10 年前开发的了,有一个是 JSP + Servlet,有一个还用的 SSH 框架,打包用的 Ant,是有多老啊,我想在座的各位很多都没听过吧。
Java技术栈
2020/09/24
5290
我把公司 10 年老系统改造 Maven,真香!!
一个小时学会Maven
在开发中经常需要依赖第三方的包,包与包之间存在依赖关系,版本间还有兼容性问题,有时还里要将旧的包升级或降级,当项目复杂到一定程度时包管理变得非常重要。
张果
2018/10/09
2.8K0
一个小时学会Maven
老问题了:idea中使用maven archetype新建项目时卡住.md
作为一个后端Java打工人,idea就是最重要的打饭工具。创建项目,熟悉吧,但是,这么多年下来,因为idea换了版本,电脑换了等等,我还是时不时遇到根据maven archetype新建maven项目卡住。没错,我说的就是下面这样的场景:
低级知识传播者
2023/08/30
1.7K0
老问题了:idea中使用maven archetype新建项目时卡住.md
Maven常用命令 原
说到命令,则不得不提一下环境变量,在之前的博文中简单提了一下环境变量的配置,这里具体说一下。说完环境变量的配置,然后就是Maven的常用命令,这里说的是常用的几个命令,不常用的也许不会提到,后续可能会补上。
云飞扬
2019/03/13
6980
Maven常用命令
                                                                            原
入门maven?本文足矣
以前开发的时候,如果A项目需要某个jar包,可能去网上搜索下载jar包,然后复制粘贴在开发对应的位置,如果B项目也需要这个jar包,那么同样需要再次手动复制粘贴到对应的位置。
用户8902830
2022/09/22
7120
入门maven?本文足矣
Maven 那点事儿(转)
毋庸置疑,Jason 也是一个秃顶。James Gosling、Rod Johnson、Gavin King,你们可以告诉我为什么吗?
Dawnzhang
2018/10/18
6820
Maven 那点事儿(转)
十二、Maven项目模板「建议收藏」
Maven提供用户,使用原型的概念,不同类型的项目模板(以数字614)是一个非常大的列表。 Maven帮助用户快速开始使用以下命令创建新的Java项目
全栈程序员站长
2022/09/09
7200
十二、Maven项目模板「建议收藏」
相关推荐
Maven Archetype 多 Module 自定义代码脚手架
更多 >
交个朋友
加入[架构及运维] 腾讯云技术交流站
云架构设计 云运维最佳实践
加入架构与运维趋势交流群
技术趋势前瞻 架构演进方向
加入[后端] 腾讯云技术交流站
后端架构设计 高可用系统实现
换一批
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档