年关将至,大家都很焦虑。老板焦虑最近用户付费数据怎么越来越不行了。
运营焦虑老板把用户付费数据不行这个帽子扣自己身上。
产品焦虑老板把用户付费数据不行这个帽子扣自己身上。
开发焦虑老板把用户付费数据不行这个帽子扣自己身上。
测试焦虑老板把用户付费数据不行这个帽子扣自己身上。

总之,大家都焦虑。作为一个在职海沉浮许久的开发,为了不让老板看向我。我给的答案是:多上十几二十个服务。
当老板处于正要开口让我背锅之前,已经在脑子里面酝酿好"你自己提离职,公司不追究你的责任"之前。我们率先出击,和他说我今年多上线了三五十服务。
一方面告诉他,我干的可不少。另一方面也是一种威慑:如果离了我,这三五十个烫手山芋谁来接?

为了多上服务,我就得整一个模版工程。虽然可以手动改,但我改了几个之后发现太特么麻烦了。
程序员怎么能吃得了这种手动干活的苦?毕竟一个 2 分钟可以干完的活,我都想花 5 分钟写个脚本自动化。

问就是高级,如果我手动干了,那怎么显示出来我是开发,我是一个坎普特训练师?
本来以前还可以用一个程序装一下,但是被你们这群爱装逼的人用多了。现在广大老板都知道了,也包括我的老板。

于是为了继续装逼,不是。是为了自动化这部分工作,我打算又写一个项目仓库用来存放模板代码。(嘿嘿,属于我的仓库+1)
那接下来就盘一下怎么做一个 maven archetype。
首先你要有一个Java开发环境,然后你要有一个模板工程,如果想大家一起用还需要有一个 maven 仓库。
步骤大概是这样的: 第一步:打开电脑 第二步:选择一部 第三步:把手放在➡️键上 第四步:另一只手...咳咳

好像不太对,贤者时间应该是这样: 第一步:准备一个正常的工程模板 第二步:引入 maven 插件生成模板 第三步:把生成的项目复制出来改一下 第四步:打包 第五步:上传到远程库(如果自娱自乐这一步就不用了)
第一步:准备正常的工程模板
自己准备去
第二步:引入 maven 插件生成模板
先引入扩展,可以通过项目生成样板项目
xml
<extension>
<groupId>org.apache.maven.archetype</groupId>
<artifactId>archetype-packaging</artifactId>
<version>3.4.1</version>
</extension>
执行命令后,就会在 target 目录中生成一个样板项目
shell
mvn archetype:create-from-project
把 target/generated-sources/ 目录下的样板项目复制出来,单独作为一个项目来修改维护。
第三部:三上 样板项目信息自定义
现在虽然已经生成了一个项目,如果想用是可以直接用的。如果有一些特殊的需求,则需要自己修改 archetype-metadata.xml 文件。
archetype-metadata.xml 文件中最重要的是 <fileSets> 这个标签的内容。

xml
<?xml version="1.0" encoding="UTF-8"?>
<archetype-descriptor ...>
<fileSets>
<fileSet filtered="true" encoding="UTF-8">
<directory>.circleci</directory>
<includes>
<include>config.yml</include>
</includes>
</fileSet>
<fileSet encoding="UTF-8">
<includes>
<include>.gitignore</include>
<include>README.md</include>
</includes>
</fileSet>
...
</fileSets>
<modules>
<module id="app" dir="app" name="app">
<fileSets>
<fileSet filtered="true" packaged="true" encoding="UTF-8">
<directory>src/main/java</directory>
<includes>
<include>**/*.java</include>
<include>**/pom.xml</include>
</includes>
</fileSet>
<fileSet encoding="UTF-8">
<directory>src/main/resources</directory>
<includes>
<include>**/*.yml</include>
</includes>
</fileSet>
<fileSet filtered="true" packaged="true" encoding="UTF-8">
<directory>src/test/java</directory>
<includes>
<include>**/*.java</include>
</includes>
</fileSet>
...
</fileSets>
</module>
<module id="controller" dir="controller" name="controller">
<fileSets>
<fileSet filtered="true" packaged="true" encoding="UTF-8">
<directory>src/main/java</directory>
<includes>
<include>**/*.java</include>
<include>**/pom.xml</include>
</includes>
</fileSet>
</fileSets>
</module>
...
</modules>
</archetype-descriptor>
这个文件中定义了要管理哪些文件夹和文件,就是要从 archetype-resources 中复制哪些文件夹和文件。
如果需要使用参数替换,就要添加 filtered="true" 就可以直接在文件中写变量,使用模板生成的时候就会自动替换。
变量通常有 ${groupId}、${artifactId}和 ${version}
.idea、.claude 这种目录不想在生成项目的时候也生成,直接删掉样板代码中的目录,或者是修改 archetype-metadata.xml
第四步:打包
shell
mvn clean install

打包完之后,本地 Maven 仓库就会多出一个项目包。这个项目包里面就有些乱七八糟的文件,jar文件、pom文件等等等等。
powershell
PS ...\repository\com\xxx\archetype\xxx-archetype> tree /F /A
.
|-- maven-metadata-local.xml
|-- maven-metadata-yuan-nexus-releases.xml
|-- resolver-status.properties
\---1.2
|-- felo-archetype-1.2.jar
|-- felo-archetype-1.2.pom
|-- _remote.repositories
既然本地有了包,那就可以直接使用了。
shell
# 这里只是进入工作目录,不需要进入项目目录
cd workspace
# 通过模板项目生成项目,会自动生成项目根目录
mvn archetype:generate
生成项目的过程会自动进入交互模式:
- 先根据提示输入项目模板对应的编号
- 在按照提示输入项目信息:
- groupId:组ID
- artifactId:项目名
- version:版本号
- package:项目包名
第五步:上传到远程库
如果自娱自乐这一步就不用了,到上一步已经可以正常使用。
如果你像我一样精益求精、坚持不懈、勇往无前还貌若潘安。

那么可以把这个项目打包完上传到远程仓库,以供需要的人使用。
第一步:先在项目的 pom.xml 中配置上仓库的地址
xml
<distributionManagement>
<repository>
<id>nexus-releases</id>
<name>Team Nexus Repository</name>
<url>https://nexus.xxx.com/repository/maven-releases/</url>
<layout>default</layout>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
<snapshotRepository>
<id>nexus-snapshots</id>
<name>Team Nexus Repository Snapshots</name>
<url>https://nexus.xxx.com/repository/maven-snapshots/</url>
<layout>default</layout>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
</snapshots>
</snapshotRepository>
</distributionManagement>
第二步:在 maven settings.xml 中配置上认证用的用户名密码
xml
<servers>
<server>
<id>nexus-releases</id>
<username>xxx</username>
<password>xxxxxxxx</password>
</server>
<server>
<id>nexus-snapshots</id>
<username>xxx</username>
<password>xxxxxxxxx</password>
</server>
</servers>
第三步:执行 deploy 命令上传jar到远程仓库
shell
mvn clean deploy
然后获取到 catalog 配置文件地址,一般是这样的URL:

第四步:在 IDEA 中使用



