自定义一个maven骨架 | 最佳实践

自定义一个maven骨架 | 最佳实践
目的:将一个多模块项目的基础结构制作成maven骨架,实现项目的快速构建,风格统一

公司内部会制定自己的规范及包结构。当创建新项目的时候就需要选择骨架,即可生成包结构。
Archetype都为不同类型的项目提供了快速创建和初始化的方式,从而提高了开发效率。

文章目录

      • 1.准备工作
      • 2.生成骨架
      • 3.将骨架安装到本地仓库
      • 4.通过idea使用骨架
      • 5.注意事项:
      • 6.ignore文件打不进去的处理方案
      • 7.效果图
      • 7.遗留问题

1.准备工作

在父pom加入maven插件(和同级)

<build><pluginManagement><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin><!-- 将项目打成maven骨架需要这三个 开始 --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-archetype-plugin</artifactId><version>3.0.1</version></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.6.1</version><configuration><source>1.8</source><target>1.8</target></configuration></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-resources-plugin</artifactId><version>3.0.2</version><configuration><encoding>UTF-8</encoding></configuration></plugin><!-- 将项目打成maven骨架需要这三个 结束 --></plugins></pluginManagement></build>

个别插件如果下载不了就多设置几个仓库来源(和同级)

<repositories><repository><id>aliyun-central</id><url>https://maven.aliyun.com/repository/central</url></repository><repository><id>aliyun-jcenter</id><url>https://maven.aliyun.com/repository/jcenter</url></repository><repository><id>aliyun-apache-snapshots</id><url>https://maven.aliyun.com/repository/apache-snapshots</url></repository><repository><id>central</id> <!-- 仓库ID,唯一标识 --><url>https://repo.maven.apache.org/maven2</url></repository></repositories>

2.生成骨架

执行mvn archetype:create-from-project命令生成骨架(要在父pom所在的目录下执行)

执行示意:
D:\java_work_space\cloud\demo>mvn archetype:create-from-project
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Build Order:
[INFO]
[INFO] springcloud-eureka-demo                                            [pom]
[INFO] common-server                                                      [jar]
[INFO] eureka-server                                                      [jar]
[INFO] eureka-client                                                      [jar]
[INFO] eureka-client-b                                                    [jar]
[INFO] loadbalancer-client                                                [jar]
[INFO]
[INFO] ----------------< com.example:springcloud-eureka-demo >-----------------
[INFO] Building springcloud-eureka-demo 1.0.0                             [1/6]
[INFO] --------------------------------[ pom ]---------------------------------
[INFO]
[INFO] >>> maven-archetype-plugin:3.0.1:create-from-project (default-cli) > generate-sources @ springcloud-eureka-demo >>>
[INFO]
[INFO] <<< maven-archetype-plugin:3.0.1:create-from-project (default-cli) < generate-sources @ springcloud-eureka-demo <<<
[INFO]
[INFO]
[INFO] --- maven-archetype-plugin:3.0.1:create-from-project (default-cli) @ springcloud-eureka-demo ---
[INFO] Setting default groupId: com.example
[INFO] Setting default artifactId: springcloud-eureka-demo
[INFO] Setting default version: 1.0.0
[INFO] Setting default package: com.example
[INFO] Scanning for projects...
[INFO]
[INFO] -----------< com.example:springcloud-eureka-demo-archetype >------------
[INFO] Building springcloud-eureka-demo-archetype 1.0.0
[INFO] --------------------------[ maven-archetype ]---------------------------
[INFO]
[INFO] --- maven-resources-plugin:3.3.1:resources (default-resources) @ springcloud-eureka-demo-archetype ---
[WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 64 resources from src\main\resources to target\classes
[INFO]
[INFO] --- maven-resources-plugin:3.3.1:testResources (default-testResources) @ springcloud-eureka-demo-archetype ---
[WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 2 resources from src\test\resources to target\test-classes
[INFO]
[INFO] --- maven-archetype-plugin:3.0.1:jar (default-jar) @ springcloud-eureka-demo-archetype ---
[INFO] Building archetype jar: D:\java_work_space\cloud\demo\target\generated-sources\archetype\target\springcloud-eureka-demo-archetype-1.0.0
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  0.808 s
[INFO] Finished at: 2024-12-19T14:19:58+08:00
[INFO] ------------------------------------------------------------------------
[INFO] Archetype project created in D:\java_work_space\cloud\demo\target\generated-sources\archetype
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO]
[INFO] springcloud-eureka-demo 1.0.0 ...................... SUCCESS [  1.956 s]
[INFO] common-server 1.0-SNAPSHOT ......................... SKIPPED
[INFO] eureka-server 1.0.0 ................................ SKIPPED
[INFO] eureka-client 1.0.0 ................................ SKIPPED
[INFO] eureka-client-b 1.0.0 .............................. SKIPPED
[INFO] loadbalancer-client 1.0.0 .......................... SKIPPED
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  2.213 s
[INFO] Finished at: 2024-12-19T14:19:58+08:00
[INFO] ------------------------------------------------------------------------D:\java_work_space\cloud\demo>

观察执行结果,骨架生成于父pom的target文件夹下:
D:\java_work_space\cloud\demo\target\generated-sources
这个目录下可以看到新生成了名为archetype的文件夹,就是骨架

3.将骨架安装到本地仓库

执行mvn install命令(打开骨架的pom所在的目录执行)

执行过程:D:\java_work_space\cloud\demo\target\generated-sources>cd D:\java_work_space\cloud\demo\target\generated-sources\archetypeD:\java_work_space\cloud\demo\target\generated-sources\archetype>mvn install
[INFO] Scanning for projects...
[INFO]
[INFO] -----------< com.example:springcloud-eureka-demo-archetype >------------
[INFO] Building springcloud-eureka-demo-archetype 1.0.0
[INFO] --------------------------[ maven-archetype ]---------------------------
[INFO]
[INFO] --- maven-resources-plugin:3.3.1:resources (default-resources) @ springcloud-eureka-demo-archetype ---
[WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 64 resources from src\main\resources to target\classes
[INFO]
[INFO] --- maven-resources-plugin:3.3.1:testResources (default-testResources) @ springcloud-eureka-demo-archetype ---
[WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 2 resources from src\test\resources to target\test-classes
[INFO]
[INFO] --- maven-archetype-plugin:3.0.1:jar (default-jar) @ springcloud-eureka-demo-archetype ---
[INFO] Building archetype jar: D:\java_work_space\cloud\demo\target\generated-sources\archetype\target\springcloud-eureka-demo-archetype-1.0.0
[INFO]
[INFO] --- maven-archetype-plugin:3.0.1:integration-test (default-integration-test) @ springcloud-eureka-demo-archetype ---
[INFO] Processing Archetype IT project: basic
[INFO] ----------------------------------------------------------------------------
[INFO] Using following parameters for creating project from Archetype: springcloud-eureka-demo-archetype:1.0.0
[INFO] ----------------------------------------------------------------------------
[INFO] Parameter: groupId, Value: archetype.it
[INFO] Parameter: artifactId, Value: basic
[INFO] Parameter: version, Value: 0.1-SNAPSHOT
[INFO] Parameter: package, Value: it.pkg
[INFO] Parameter: packageInPathFormat, Value: it/pkg
[INFO] Parameter: version, Value: 0.1-SNAPSHOT
[INFO] Parameter: package, Value: it.pkg
[INFO] Parameter: groupId, Value: archetype.it
[INFO] Parameter: artifactId, Value: basic
[WARNING] Don't override file D:\java_work_space\cloud\demo\target\generated-sources\archetype\target\test-classes\projects\basic\project\basic\.idea\artifacts\demo_war.xml
[WARNING] Don't override file D:\java_work_space\cloud\demo\target\generated-sources\archetype\target\test-classes\projects\basic\project\basic\.idea\artifacts\demo_war_exploded.xml
[INFO] Parent element not overwritten in D:\java_work_space\cloud\demo\target\generated-sources\archetype\target\test-classes\projects\basic\project\basic\eureka-server\pom.xml
[INFO] Parent element not overwritten in D:\java_work_space\cloud\demo\target\generated-sources\archetype\target\test-classes\projects\basic\project\basic\eureka-client\pom.xml
[INFO] Parent element not overwritten in D:\java_work_space\cloud\demo\target\generated-sources\archetype\target\test-classes\projects\basic\project\basic\eureka-client-b\pom.xml
[INFO] Parent element not overwritten in D:\java_work_space\cloud\demo\target\generated-sources\archetype\target\test-classes\projects\basic\project\basic\loadbalancer-client\pom.xml
[INFO] Parent element not overwritten in D:\java_work_space\cloud\demo\target\generated-sources\archetype\target\test-classes\projects\basic\project\basic\common-server\pom.xml
[INFO] Project created from Archetype in dir: D:\java_work_space\cloud\demo\target\generated-sources\archetype\target\test-classes\projects\basic\project\basic
[INFO]
[INFO] --- maven-install-plugin:3.1.3:install (default-install) @ springcloud-eureka-demo-archetype ---
[INFO] Installing D:\java_work_space\cloud\demo\target\generated-sources\archetype\pom.xml to D:\maven\mvn_repository\com\example\springcloud-eureka-demo-archetype\1.0.0\springcloud-eureka-demo-archetype-1.0.0.pom
[INFO] Installing D:\java_work_space\cloud\demo\target\generated-sources\archetype\target\springcloud-eureka-demo-archetype-1.0.0.jar to D:\maven\mvn_repository\com\example\springcloud-eureka-demo-archetype\1.0.0\springcloud-eureka-
demo-archetype-1.0.0.jar
[INFO]
[INFO] --- maven-archetype-plugin:3.0.1:update-local-catalog (default-update-local-catalog) @ springcloud-eureka-demo-archetype ---
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  0.812 s
[INFO] Finished at: 2024-12-19T14:26:00+08:00
[INFO] ------------------------------------------------------------------------D:\java_work_space\cloud\demo\target\generated-sources\archetype>

此时可以按骨架的坐标到本地maven仓库搜一下有没有生成对应骨架的jar:
D:\maven\mvn_repository\com\example\springcloud-eureka-demo-archetype

至此骨架安装到本地仓库了

4.通过idea使用骨架

我的是2020版的idea:file-》new project-》maven -》勾选create from archetype - 》 add archetype -》 填入对应的坐标信息
即可完成基础项目搭建

5.注意事项:

1.执行命令要找准目录
2.一些教程说在项目的根目录下执行xxx命令。这个根目录,在maven项目中,指的就是pom文件所在的目录

脚手架能力:
重复的工作通过标准的工具解决。

1.mybatis逆向工程支持
2.基本的maven结构
3.按代码风格,形成风格架构比如ddd。按单体或微服务提供常用依赖支持
4.能够适配构建发布流程
5.有固定的分层
6.通用能力(redis,MongoDB工具类)、有基本的工具类支持
7.单元测试实例
8.集成成熟的接口文档,比如yapi

//若依脚手架

https://www.cnblogs.com/kisshappyboy/p/18096562

6.ignore文件打不进去的处理方案

【.ignore文件打不进去】
新增ignore文件(生成骨架后,手动赋值ignore到archetype-resources 目录下的根目录中,再执行install)

确保 .gitignore 位于 archetype-resources 目录下的根目录中。

D:\java_work_space\cloud\demo\target\generated-sources\archetype\src\main\resources\archetype-resources

或者模版工程内的.gitignore文件重命名成__gitignore__这样就会直接打包到骨架中了

从git移除项目无关文件:

git rm --cached *.log
git rm --cached *.iml

7.效果图

骨架安装到本地之后,在本地maven仓库:
在这里插入图片描述

在这里插入图片描述

执行完生成骨架命令之后,骨架于target目录生成:
在这里插入图片描述
在这里插入图片描述
如果想把gitignore文件打包到骨架中,要手动复制,再install:
在这里插入图片描述

在idea使用自定义骨架:
在这里插入图片描述

7.遗留问题

如果要打成骨架的模板工程也带上了.iml .idea文件,即使加了archetype.properties过滤文件也不管用,暂时没找到解决方案

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/890554.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CTFHUB-web进阶(Bypassdisable_function)

LD_PRELOAD 来到首页发现有一句话直接就可以用蚁剑连接 根目录里有/flag但是不能看;命令也被ban了就需要绕过了 绕过工具在插件市场就可以下载 如果进不去的话 项目地址: #本地仓库;插件存放 antSword\antData\plugins 绕过选择 上传后我们点进去可以看到多了一个绕过的文件;…

workman服务端开发模式-GatewayWorker的使用

一、GatewayWorker介绍 Workerman是一个使用PHP开发的高性能组件&#xff0c;用于构建高性能的异步并发TCP、UDP、Unix Socket、HTTP、Websocket服务。 GatewayWorker是基于Workerman开发的一套TCP长连接的应用框架&#xff0c;实现了单发、群发、广播等接口&#xff0c;内置了…

oracle linux8.10+ oracle 23ai安装

介质准备&#xff1a; 数据库23ai https://edelivery.oracle.com 上述网站下载基础版本&#xff0c;本次未使用。 本次是安装了带补丁的版本&#xff1a; Database Release Update 23.6.0.24.10 GoldImage表示带补丁用于直接安装的软件包 查找888.1对应Primary Note for …

《软件设计的哲学》阅读摘要之设计原则

《软件设计的哲学》&#xff08;A Philosophy of Software Design&#xff09;是一本在软件架构与设计领域颇具影响力的书籍&#xff0c;作者 John Ousterhout 在书中分享了诸多深刻且实用的软件设计理念。书中列举的这些设计原则&#xff0c;汇聚了作者丰富的实战经验与深邃的…

uniApp打包H5发布到服务器(docker)

使用docker部署uniApp打包后的H5项目记录&#xff0c;好像和VUE项目打包没什么区别... 用HX打开项目&#xff0c;首先调整manifest.json文件 开始用HX打包 填服务器域名和端口号~ 打包完成后可以看到控制台信息 我们可以在web文件夹下拿到下面打包好的静态文件 用FinalShell或…

项目实战——高并发内存池

一.项目介绍 本项目——高并发内存池&#xff0c;是通过学习并模仿简化 google 的一个开源项目 tcmalloc &#xff0c;全称 Thread-Caching Malloc&#xff0c;即线程缓存的malloc&#xff0c;模拟实现了一个自己的高并发内存池&#xff0c;用于高效的多线程内存管理&#xff…

Apache Log4j漏洞复现

所用环境 宝塔云服务器 log4j2 是Apache的⼀个java日志框架&#xff0c;我们借助它进行日志相关操作管理&#xff0c;然而在2021年末log4j2爆出了远程代码执行漏洞&#xff0c;属于严重等级的漏洞。 apache log4j通过定义每⼀条日志信息的级别能够更加细致地控制日志⽣成地过…

自动驾驶控制算法-横向误差微分方程LQR前馈控制

本文是学习自动驾驶控制算法第六讲 前馈控制与航向误差以及前两节的学习笔记。 1 横向误差微分方程 以规划的轨迹作为自然坐标系&#xff0c;计算自车在轨迹上的投影点&#xff0c;进而计算误差&#xff1a; 如图所示&#xff0c;横向误差为 d d d&#xff0c;航向误差为 θ…

Apache RocketMQ 5.1.3安装部署文档

官方文档不好使&#xff0c;可以说是一坨… 关键词&#xff1a;Apache RocketMQ 5.0 JDK 17 废话少说&#xff0c;开整。 1.版本 官网地址&#xff0c;版本如下。 https://rocketmq.apache.org/download2.配置文件 2.1namesrv端口 在ROCKETMQ_HOME/conf下 新增namesrv.pro…

Google Cloud Kubernetes Anthos是什么,和Istio有什么关联

Google Cloud Platform (GCP) Kubernetes Anthos 是 Google 推出的一种多云管理平台&#xff0c;基于 Kubernetes&#xff0c;旨在帮助企业在多个云环境中管理和运行容器化应用程序。 https://cloud.google.com/blog/topics/hybrid-cloud/5-frequently-asked-questions-about-…

多摩川编码器协议

多摩川编码器是一种常用的绝对值编码器&#xff0c;其协议基于485硬件接口的标准NRZ协议&#xff0c;通讯波特率为固定的2.5Mbps。以下是多摩川编码器协议的详细说明&#xff1a; 硬件接口 多摩川编码器使用RS485接口进行通信&#xff0c;接口定义如下&#xff1a; 5V供电&…

AI新书推荐:深度学习和大模型原理与实践(清华社)

本书简介 在这个信息爆炸、技术革新日新月异的时代&#xff0c;深度学习作为人工智能领域的重要分支&#xff0c;正引领着新一轮的技术革命。《深度学习和大模型原理与实践》一书&#xff0c;旨在为读者提供深度学习及其大模型技术的全面知识和实践应用的指南。 本书特色在于…

webrtc音频模块(三) windows Core Audio API及声音的播放

在前面介绍了ADM(Audio Device Module)&#xff0c;它用于抽象音频设备管理和音频数据采集/播放接口。windows的实现是AudioDeviceWinowCode&#xff0c;它封装了Core Audio APIs实现了对音频设备的操作。 Core Audio APIs windows提供了多种音频操作API&#xff0c;比如最常…

cursor保存更改操作技巧

1. 当我们在agent模式时&#xff0c;要求cursor更改代码时&#xff0c;cursor回答后&#xff0c;就已经更改了代码了&#xff0c;这时候就可以对程序进行编译和测试&#xff0c; 不一定先要点” accept“, 先测试如果没有问题再点“accept”&#xff0c;这样composer就会多一条…

运维工程师面试系统监控与优化自动化与脚本云计算的理解虚拟化技术的优点和缺点

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c; 忍不住分享一下给大家。点击跳转到网站 学习总结 1、掌握 JAVA入门到进阶知识(持续写作中……&#xff09; 2、学会Oracle数据库入门到入土用法(创作中……&#xff09; 3、手把…

2.在 Vue 3 中使用 ECharts 实现动态时间轴效果

在前端开发中&#xff0c;时间轴&#xff08;Timeline&#xff09;是一种常见且有效的方式来展示时间相关的数据。在本篇文章中&#xff0c;我们将展示如何在 Vue 3 项目中使用 ECharts 创建一个具有动态时间范围的时间轴&#xff0c;并添加了今日时间的标记以及通过按钮来前进…

Android修行手册 - 移动端几种常用动画方案对比

Unity3D特效百例案例项目实战源码Android-Unity实战问题汇总游戏脚本-辅助自动化Android控件全解手册再战Android系列Scratch编程案例软考全系列Unity3D学习专栏蓝桥系列ChatGPT和AIGC &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff0c;以及各种资源分…

Java日志框架:log4j、log4j2、logback

文章目录 配置文件相关1. properties测试 2. XMl使用Dom4j解析XML Log4j与Log4j2日志门面 一、Log4j1.1 Logges1.2 Appenders1.3 Layouts1.4 使用1.5 配置文件详解1.5.1 配置根目录1.5.2 配置日志信息输出目的地Appender1.5.3 输出格式设置 二、Log4j22.1 XML配置文件解析2.2 使…

《信管通低代码信息管理系统开发平台》Linux环境安装说明

1 简介 信管通低代码信息管理系统应用平台提供多环境软件产品开发服务&#xff0c;包括单机、局域网和互联网。我们专注于适用国产硬件和操作系统应用软件开发应用。为事业单位和企业提供行业软件定制开发&#xff0c;满足其独特需求。无论是简单的应用还是复杂的系统&#xff…

HTTPS协议原理与CA认证

目录 引言 HTTPS 是什么 1.什么是"加密" 2. 为什么要加密 3. 常⻅的加密⽅式 对称加密 ⾮对称加密 4.数据摘要 && 数据指纹 5. 数字签名 HTTPS 的⼯作过程探究 ⽅案 1 - 只使⽤对称加密 ⽅案 2 - 只使⽤⾮对称加密 ⽅案 3 - 双⽅都使⽤⾮对称加密…