idea 制作maven脚手架_开发一个maven脚手架

本文介绍了如何使用IntelliJ IDEA创建一个Maven工程的脚手架,包括模板工程的目录结构,配置步骤,以及解决生成过程中遇到的文件冗余和.gitignore丢失问题。通过设置archetype-metadata.xml和archetype.properties文件,可以定制化的生成无冗余的项目模板。
摘要由CSDN通过智能技术生成

写在前面

开发新项目就需要搭建新工程,但是搭建新工程的这个过程是非常繁琐浪费时间的,并且不可避免的需要踩坑。更可怕的是,如果是在一个团队中,每新起一个项目都由不同的开发人员去自定义的搭建工程结构,那么对后续的统一管理,监控,运维简直是灾难。基于以上几点,团队内部其实是非常有必要搭建一个统一的脚手架来供统一使用

制作一个脚手架

下面我们就来详细的介绍如何搭建一个maven工程的脚手架

要搭建脚手架,首先我们需要一个模板工程,这个模板工程一般来说会集成一些工具类,底层中间件,通用配置,并且要有良好的分层结构等。需要能够达到开箱即用的程度。

以下是一个模板工程的目录结构,也是目前我们团队内部的标准化结构

.

├── example-client

│ ├── pom.xml

│ └── src

├── example-core

│ ├── pom.xml

│ └── src

├── example-server

│ ├── pom.xml

│ └── src

├── example-test

│ ├── pom.xml

│ └── src

├── Jenkinsfile

├── README.md

├── .gitignore

└── pom.xml

完成模板工程的搭建后,需要在模板工程的最外层 pom 文件加入以下配置

org.apache.maven.plugins

maven-archetype-plugin

3.0.1

org.apache.maven.plugins

maven-compiler-plugin

3.6.1

1.8

1.8

org.apache.maven.plugins

maven-resources-plugin

3.0.2

UTF-8

完成之后在根目录下执行

mvn archetype:create-from-project

刷新项目后,会发现在 ./target/generated-sources/archetype目录下生成了脚手架工程,生成的脚手架工程可以当成是一个独立的项目,目录结构如下图

.

├── pom.xml

├── src

│ ├── main

│ │ └── resources

│ │ ├── META-INF

│ │ │ └── maven

│ │ │ └── archetype-metadata.xml

│ │ └── archetype-resources

│ │ ├── Jenkinsfile

│ │ ├── README.md

│ │ ├── artifactId.iml

│ │ ├── rootArtifactId-client

│ │ │ ├── parentArtifactId-client.iml

│ │ │ ├── pom.xml

│ │ │ └── src

│ │ ├── rootArtifactId-core

│ │ │ ├── parentArtifactId-core.iml

│ │ │ ├── pom.xml

│ │ │ └── src

│ │ ├── rootArtifactId-server

│ │ │ ├── parentArtifactId-server.iml

│ │ │ ├── pom.xml

│ │ │ └── src

│ │ ├── rootArtifactId-test

│ │ │ ├── parentArtifactId-test.iml

│ │ │ ├── pom.xml

│ │ │ └── src

│ │ └── pom.xml

│ └── test

│ └── resources

│ └── projects

│ └── basic

│ ├── archetype.properties

│ └── goal.txt

在脚手架工程目录下执行 mvn install 就完成了脚手架的本地安装,安装完成之后,这个脚手架在本地就可以使用了

可以执行以下脚本来通过此脚手架创建项目

mvn archetype:generate -DgroupId=com.xxx.example -DartifactId=xxxx -Dpackage=com.xxx.example -DarchetypeGroupId=com.demo.archetype -DarchetypeArtifactId=demo-archetype -DarchetypeVersion=1.0.0-SNAPSHOT -DinteractiveMode=false

扫坑

不过如果我们直接这样使用的话,会发现生成了很多我们并不想要它出现的文件,比如 .idea .iml 文件等等,并且 .gitignore 文件也诡异的消失了(不知为何会忽略这个文件??)... 这显然不是成熟的脚手架了。那么就需要对它做一些额外的配置了

有两种方式可以解决上面出现的问题

将 .gitignore文件重命名为 gitignore,然后在模板工程根目录下新建 archetype.properties 文件,并填入以下内容

## generate for archetype-metadata.xml

excludePatterns=archetype.properties,*.iml,.idea/,.idea/libraries,logs/,build.sh

## generate .gitignore file

gitignore=.gitignore

完成上述配置后,重新执行 mvn archetype:create-from-project 生成脚手架工程。再完成本地安装,上面出现的问题就会解决

第二种方式本质上和第一种方式是一样的,只是第二种方式是直接修改脚手架工程的配置文件。第一种方式相当于是执行 mvn archetype:create-from-project 时读取了 archetype.properties 帮我们做了配置文件的修改。

maven的脚手架工程下有两个重要的配置文件

./src/test/resources/projects/basic/archetype.properties

这里可以加入自定义变量,如 gitignore 变量

./src/main/resources/META-INF/maven/archetype-metadata.xml

下面是一个典型的archetype-metadata.xml文件

xmlns="http://maven.apache.org/plugins/maven-archetype-plugin/archetype-descriptor/1.0.0"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

.gitignore

8888

__gitignore__

README.md

Jenkinsfile

pom.xml

src/main/java

**/*.java

src/main/java

**/*.java

src/main/resources

**/*.xml

src/main/java

**/*.java

src/main/resources

**/*.xml

src/main/resources/META-INF/dubbo

*

src/main/resources

**/*.yml

archetype-metadata.xml 结构

简单介绍archetype-metadata.xml文件的基本结构

是属性变量定义层,在这里定义的变量可以在archetype工程文件中通过

math?formula=%7Bxxx%7D%20%E6%9D%A5%E8%BF%9B%E8%A1%8C%E5%BC%95%E7%94%A8%EF%BC%8C%E6%96%87%E4%BB%B6%E5%90%8D%E5%88%99%E5%8F%AF%E4%BB%A5%E9%80%9A%E8%BF%87%20__xxx__%E6%9D%A5%E5%BC%95%E7%94%A8%E5%8F%98%E9%87%8F%EF%BC%88%E8%BF%99%E5%B0%B1%E6%98%AF%E4%B8%BA%E4%BB%80%E4%B9%88%E8%A6%81%E6%8A%8A.gitignore%E9%87%8D%E5%91%BD%E5%90%8D%E4%B8%BA__gitignore__%EF%BC%89%E3%80%82%E5%8F%98%E9%87%8F%E5%9C%A8%E6%89%A7%E8%A1%8C%20mvn%20archetype%3Agenerate%E6%97%B6%E6%89%8D%E5%BD%95%E5%85%A5%E7%9C%9F%E6%AD%A3%E5%86%85%E5%AE%B9%20%E5%86%8D%E5%BE%80%E4%B8%8B%E5%85%B6%E5%AE%9E%E5%B0%B1%E6%98%AF%E5%AE%9A%E4%B9%89%E5%B0%86%E8%A6%81%E7%94%9F%E6%88%90%E7%9A%84%E5%B7%A5%E7%A8%8B%E7%9B%AE%E5%BD%95%E7%BB%93%E6%9E%84%EF%BC%8C%E9%A6%96%E5%85%88%E6%98%AF%E4%B8%80%E4%B8%AA%20fileSets%20%EF%BC%88%E5%8C%85%E5%90%AB%E5%A4%9A%E4%B8%AA%20fileSet%E6%A0%87%E7%AD%BE%EF%BC%89%E6%A0%87%E7%AD%BE%E5%AE%9A%E4%B9%89%E4%BA%86%E6%A0%B9%E7%9B%AE%E5%BD%95%E9%9C%80%E8%A6%81%E7%94%9F%E6%88%90%E5%93%AA%E4%BA%9B%E6%96%87%E4%BB%B6%EF%BC%8C%E5%86%8D%E9%80%9A%E8%BF%87%E5%A4%9A%E4%B8%AAmodules%20%E6%A0%87%E7%AD%BE%E6%9D%A5%E5%AE%9A%E4%B9%89%E5%A4%9A%E4%B8%AA%E5%AD%90%E6%A8%A1%E5%9D%97%EF%BC%88%E5%A6%82%E6%9E%9C%E6%98%AF%E5%A4%9A%E6%A8%A1%E5%9D%97%E5%B7%A5%E7%A8%8B%E7%9A%84%E8%AF%9D%EF%BC%89%E3%80%82%E8%BF%99%E5%85%B6%E4%B8%AD%E6%AF%94%E8%BE%83%E9%87%8D%E8%A6%81%E7%9A%84%E5%85%B6%E5%AE%9E%E8%BF%98%E6%98%AF%20fileSet%E6%A0%87%E7%AD%BE%EF%BC%8CfileSet%E6%9C%89%E4%B8%A4%E4%B8%AA%E9%87%8D%E8%A6%81%E7%9A%84%E5%B1%9E%E6%80%A7%20filtered%20%3D%20true%20%E5%A6%82%E6%9E%9C%E4%B8%BAtrue%EF%BC%8C%E5%88%99%E8%AF%A5%20fileSet%E5%8C%85%E5%90%AB%E7%9A%84%E6%96%87%E4%BB%B6%E4%B8%AD%E7%9A%84{} 占位符会被替换成相应的变量

packaged = true 如果为true,则 src/main/java 下得文件内容会被加入 指定包路径下

总结

一个优秀少坑的脚手架还是能极大的提升生产力的,毕竟这种重复且无价值的劳动我们还是交给工具吧

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值