自定义idea archetype

article/2025/10/1 6:13:03

编写 archetype 元数据

通过plugin从现有项目中导出

1、引入plugin

            <plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-archetype-plugin</artifactId><version>3.2.0</version></plugin>

2、通过maven命令生成archetype元数据

  • 在cmd中执行
mvn archetype:create-from-project
  • 在idea中执行

在这里插入图片描述

生成的archetype元数据在 目录:target\generated-sources\archetype 下。

├─src
│  ├─main
│  │  └─resources
│  │      ├─archetype-resources
│  │      │  ├─.idea
│  │      │  │  ├─inspectionProfiles
│  │      │  │  └─sonarlint
│  │      │  │      └─issuestore
│  │      │  ├─frame-api
│  │      │  │  └─src
│  │      │  │      └─main
│  │      │  │          └─java
│  │      │  │              └─cloud
│  │      │  │                  └─frame
│  │      │  │                      ├─dto
│  │      │  │                      ├─feign
│  │      │  │                      └─vo
│  │      │  └─frame-biz
│  │      │      └─src
│  │      │          └─main
│  │      │              ├─java
│  │      │              │  ├─cloud
│  │      │              │  │  └─frame
│  │      │              │  │      ├─config
│  │      │              │  │      ├─constant
│  │      │              │  │      ├─controller
│  │      │              │  │      ├─exception
│  │      │              │  │      ├─mapper
│  │      │              │  │      ├─model
│  │      │              │  │      ├─service
│  │      │              │  │      │  └─impl
│  │      │              │  │      ├─util
│  │      │              │  │      └─vo
│  │      │              │  ├─mapper
│  │      │              │  ├─model
│  │      │              │  └─service
│  │      │              │      └─impl
│  │      │              └─resources
│  │      └─META-INF
│  │          └─maven
│  └─test
│      └─resources
│          └─projects
│              └─basic

注意,通过现有项目生成会出现以下问题:

  • 如果源代码中仅有package,而没有类文件,则此package对应的目录会丢失。
  • 有些文件例如:.gitignore会丢失
  • 生成的模块名称是固定的

因此要对现有archetype进行调整

手工编写

手工编写也是生成上面的archetype,但是可以进行调整,主要包括:

增加一些变量,更精确的进行控制

增加一些文件

生成 archetype

在目录target\generated-sources\archetype 下执行 以下命令

#本地安装
mvn install 
#远程发布
mvn deploy

在根目录下执行

#把本地仓库中所有的可用archetype 展示出来
mvn archetype:crawl

使用archetype

在Idea中使用

1、添加archetype

groupId=com.jurassic   
artifactId=jurassic-frame-archetype 
version=2.0.0 

在这里插入图片描述

2、通过archetype创建项目

在这里插入图片描述

删除自定义archetype

在 下面文件中有对应记录,删除重启IDEA即可

# C:\Users\{用户}\.IntelliJIdea2018.2\system\Maven\Indices\<archetypes><archetype groupId="com.jurassic" artifactId="jurassic-frame-archetype" version="1.0.0" />
</archetypes>

命令行

mvn archetype:generate     -DarchetypeGroupId=com.jurassic   -DarchetypeArtifactId=jurassic-frame-archetype  -DarchetypeVersion=2.0.0 -DprojectName=test

可以给每个属性在命令行中设置参数,如果没有设置,则会提示输入参数值,有默认值的直接回车即可

交互

[INFO] Generating project in Interactive mode
[WARNING] No archetype found in remote catalog. Defaulting to internal catalog
[INFO] Archetype repository not defined. Using the one from [com.jurassic:jurassic-frame-archetype:2.0.0] found in catalog local
[INFO] Using property: groupId = com.jurassic
[INFO] Using property: projectName = Test
Define value for property 'artifactId' cloud-Test: :
Define value for property 'version' 1.0-SNAPSHOT: : 2.0.0
Define value for property 'package' com.jurassic.cloud.Test: :
Confirm properties configuration:
groupId: com.jurassic
projectName: Test
artifactId: cloud-Test
version: 2.0.0
package: com.jurassic.cloud.TestY: : Y
[INFO] ----------------------------------------------------------------------------
[INFO] Using following parameters for creating project from Archetype: jurassic-frame-archetype:2.0.0
[INFO] ----------------------------------------------------------------------------
[INFO] Parameter: groupId, Value: com.jurassic
[INFO] Parameter: artifactId, Value: cloud-Test
[INFO] Parameter: version, Value: 2.0.0
[INFO] Parameter: package, Value: com.jurassic.cloud.Test
[INFO] Parameter: packageInPathFormat, Value: com/jurassic/cloud/Test
[INFO] Parameter: package, Value: com.jurassic.cloud.Test
[INFO] Parameter: version, Value: 2.0.0
[INFO] Parameter: projectName, Value: Test
[INFO] Parameter: groupId, Value: com.jurassic
[INFO] Parameter: artifactId, Value: cloud-Test
[INFO] Parent element not overwritten in E:\codes\cloud-test\cloud-Test\cloud-Test-api\pom.xml
[INFO] Parent element not overwritten in E:\codes\cloud-test\cloud-Test\cloud-Test-biz\pom.xml
[INFO] Project created from Archetype in dir: E:\codes\cloud-test\cloud-Test
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 44.414 s
[INFO] Finished at: 2021-01-07T15:22:33+08:00
[INFO] ------------------------------------------------------------------------
[WARNING] The requested profile "env-dev" could not be activated because it does not exist.

如果不想用交互模式,则设置参数: -DinteractiveMode=false


mvn archetype:generate  -DinteractiveMode=false   -DarchetypeGroupId=com.jurassic   -DarchetypeArtifactId=jurassic-frame-archetype  -DarchetypeVersion=2.0.0 -DprojectName=Test

archetype详细介绍

文件详解

  • 根目录下的pom.xml和一般的maven项目一样主要定义archetype项目的坐标等信息。
  • 所有的项目骨架内容都集中在src/main/resources/archetype-resources文件夹下。
  • archetype-resources中的pom.xml定义了待生成项目的pom文件的内容,/src/main/java、/src/test/java中分别定义了待生成项目中相应目录下的内容
  • /src/main/resources/META-INF/maven/archetype-metadata.xml中定义相关的元数据描述(其中该文件的位置固定为resources/META-INF/maven文件夹下,且名称固定为archetype-metadata.xml)。
  • target\generated-sources\archetype\src\test\resources 目录下为插件测试用的配置,如果有自定义参数,需要修改projects\basic\archetype.properties 文件信息

根目录下pom.xml

  <groupId>com.jurassic</groupId><artifactId>jurassic-frame-archetype</artifactId><version>2.0.0</version><packaging>maven-archetype</packaging><name>jurassic-frame-archetype</name>

/**/archetype-resources/pom.xml

    <parent><groupId>com.jurassic</groupId><artifactId>jurassic-cloud</artifactId><version>2.0.0-RELEASE</version></parent><groupId>${groupId}</groupId><artifactId>${artifactId}</artifactId><version>${version}</version><packaging>pom</packaging>

POM中 ${}标识的变量都是通过maven中的命令行传进来的 ,idea操作会通过输入框输入。

 mvn archetype:generate -DgroupId=com.jurassic 

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 http://maven.apache.org/xsd/archetype-descriptor-1.1.0.xsd" name="jurassic-frame"xmlns="https://maven.apache.org/plugins/maven-archetype-plugin/archetype-descriptor/1.1.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><fileSets><fileSet filtered="true" encoding="UTF-8"><directory>.idea/inspectionProfiles</directory><includes><include>**/*.xml</include></includes></fileSet><fileSet filtered="true" encoding="UTF-8"><directory>.idea</directory><includes><include>**/*.xml</include></includes></fileSet>... ... <fileSet encoding="UTF-8"><directory/><includes><include>.gitignore</include><include>jurassic-frame.iml</include><include>readme.md</include></includes></fileSet></fileSets><requiredProperties><requiredProperty key="groupId"><defaultValue>com.jurassic</defaultValue></requiredProperty><requiredProperty key="artifactId"><defaultValue>cloud</defaultValue></requiredProperty><requiredProperty key="package"><defaultValue>com.jurassic.cloud</defaultValue></requiredProperty></requiredProperties><modules><module id="${rootArtifactId}-api" dir="__rootArtifactId__-api" name="${rootArtifactId}-api">... ... </module><module id="${rootArtifactId}-biz" dir="__rootArtifactId__-biz" name="${rootArtifactId}-biz">... ... </module></modules>
</archetype-descriptor>

说明:

  • packaged="true"标识src/main/resources/archetype-resources/src/main/java中对应的内容是否要放入到package中,比如package为com.jurassic,那么如果该属性为true,则对应的java文件会放到com/jurassic文件夹下,也就是包路径下。
  • filtered="true"标识下面提到的**${}是否要进行替换**

module有三个属性,解释如下:
id :定义子模块工程的artifactId.
dir :子模块工程源文件在archetype-resources里对应的directory.
name :子模块的名字.

类文件

#set( $symbol_pound = '#' )
#set( $symbol_dollar = '$' )
#set( $symbol_escape = '\' )
package ${package}.constant;public class T1Constant {
}

${package}是包名变量。

变量/属性

  • “ __rootArtifactId__ ”占位符会被parent项目的***artifactId***替换,主要用于路径中
  • ${rootArtifactId}也会被parent项目的artifactId替换,主要用于文件中
  • src/main/resources/archetype-resources里必须要有一个顶级pom文件(如果是单工程就是工程pom文件),同时子文件夹代表了模块定义
    <requiredProperties><requiredProperty key="groupId"><defaultValue>com.jurassic</defaultValue></requiredProperty><requiredProperty key="artifactId"><defaultValue>cloud</defaultValue></requiredProperty><requiredProperty key="package"><defaultValue>com.jurassic.cloud</defaultValue></requiredProperty></requiredProperties>

这些属性可以在资源元文件里的任意一个文件里通过${var}来引用,所以的元文件最终都可以选择通过velocity引擎来执行替换后生成。
默认的属性有:groupId,artifactId,packeage,version等

文件名或者路径中包含 _property_ 则会被属性值替换

注意:如果打包(install deploy等)时,报错说:没有在archetype.properties定义你定义的自定义属性。Missing required properties in archetype.properties: ,是因为集成测试模块造成,请在src/test/resources/projects/basic/archetype.properties中添加对应的属性即可解决。

参考

http://maven.apache.org/archetype/maven-archetype-plugin/specification/archetype-metadata.html

http://maven.apache.org/archetype/archetype-models/archetype-descriptor/archetype-descriptor.html

https://blog.csdn.net/zp820705/article/details/103852642

.gitignore文件丢失

通过变量解决:

1.首先修改下你的.gitignore文件名为(注意是两个_)

__gitignore__

2.在你的archetype-metadata.xml中添加

<requiredProperties><requiredProperty key="gitignore"><defaultValue>.gitignore</defaultValue></requiredProperty>
</requiredProperties>
<fileSets><fileSet encoding="UTF-8"><directory></directory><includes><include>.editorconfig</include><include>__gitignore__</include></includes></fileSet>
</fileSets>

3.在对应的test包中archetype.properties中添加变量默认值

gitignore=.gitignore

参考:https://blog.csdn.net/dj7858177/article/details/111948017


http://chatgpt.dhexx.cn/article/TTlm1Jhe.shtml

相关文章

Maven 三种archetype说明

新建Maven project项目时,需要选择archetype。 那么,什么是archetype? archetype的意思就是模板原型的意思,原型是一个Maven项目模板工具包。一个原型被定义为从其中相同类型的所有其它事情是由一个原始图案或模型。名称配合,因为我们正在努力提供一种系统,该系统提供了…

maven中archetype(原型)的使用及创建

当我们在idea中创建项目时&#xff0c;经常会见到如下界面选择&#xff1a; archetype也就是原型&#xff0c;准确说是一个项目模板&#xff0c;我们可以根据该模板来生成项目。 我就不介绍图形界面的创建方式了&#xff0c;一步一步太啰嗦了&#xff0c;我们用命令方式创建。…

创建自定义的archetype(项目模板)

一、archetype简介 Archetype是一个Maven项目的模板工具包&#xff0c;它定义了一类项目的基本架构。Archetype为开发人员提供了创建Maven项目的模板&#xff0c;同时它也可以根据已有的Maven项目生成参数化的模板。通过archetype&#xff0c;开发人员可以很方便地将一类项目的…

Maven创建时archetype的选择说明

新建Maven project项目时&#xff0c;需要选择archetype。 那么&#xff0c;什么是archetype&#xff1f; archetype的意思就是模板原型的意思&#xff0c;原型是一个Maven项目模板工具包。一个原型被定义为从其中相同类型的所有其它事情是由一个原始图案或模型。名称配合&am…

Maven的Archetype简介

简单的说&#xff0c;Archetype是Maven工程的模板工具包。一个Archetype定义了要做的相同类型事情的初始样式或模型。这个名称给我们提供来了一个一致的生成Maven工程的方式。Archetype会帮助作者给用户创建Maven工程模板&#xff0c;并给用户提供生成相关工程模板版本的参数化…

c语言学习--强制类型转换

C语言中关于强制类型转换问题 由于朋友问到&#xff0c;所以整理了一份&#xff0c;若关于一些认识有错误还望指出...... ● 如果一个运算符两边的运算数类型不同&#xff0c;先要将其转换为相同的类型&#xff0c;即较低类型转换为较高类型&#xff0c;然后再参加运算&#xf…

列举三种强制类型转换

1 强制类型转换—String 这里主要列举了两种强制转换为字符串类型的方法&#xff0c;我们也在log控制台中验证了新的类型。 但是注意&#xff1a;null 和 undefined 这两个值没有 toString()方法。 2 强制类型转换—Number 这里我为大家列举了三种方法&#xff0c;但是注意后…

C语言(强制类型转换)

一.类型转换原则 1.升级&#xff1a;当类型转换出现在表达式时&#xff0c;无论时unsigned还是signed的char和short都会被自动转换成int&#xff0c;如有必要会被转换成unsigned int(如果short与int的大小相同&#xff0c;unsigned short就比int大。这种情况下&#xff0c;uns…

如何进行强制类型转换?

1、自动类型转换 自动类型转换就是编译器默默地、隐式地、偷偷地进行的数据类型转换&#xff0c;这种转换不需要程序员干预&#xff0c;会自动发生。 1) 将一种类型的数据赋值给另外一种类型的变量时就会发生自动类型转换&#xff0c;例如&#xff1a; float f 100; 100 是 i…

Java中的强制类型转换

尽管自动类型转换是很方便的&#xff0c;但并不能满足所有的编程需要。 例如&#xff0c;当程序中需要将 double 型变量的值赋给一个 int 型变量&#xff0c;该如何实现呢&#xff1f; 显然&#xff0c;这种转换是不会自动进行的&#xff01;因为 int 型的存储范围比 doub…

C++的四种强制类型转换

目录 1、C语言中的类型转换 2、为什么C需要四种类型转换 3、C强制类型转换 static_cast reinterpret_cast const_cast dynamic_cast 4、RTTI&#xff08;了解&#xff09; 5、常见面试题 1、C语言中的类型转换 在C语言中&#xff0c;如果赋值运算符左右两侧类型不同&#…

Java中强制类型转换

Java中强制类型转换 一、整型强转 类型转换都是小范围向大范围转换的&#xff0c;大范围往小范围转化需要用到强制转换&#xff0c;转换后的值会有所损失。 不同数据类型精度由小到大排列如下&#xff1a;char-->byte --> short --> int --> long --> float --…

(强制)类型转换方法

目录 一、C语言中的类型转换 二、C中的强制类型转换 2.1 static_cast 2.2 reinterpret_cast 2.3 const_cast 2.4 dynamic_cast 2.5 总结 一、C语言中的类型转换 在C语言中&#xff0c;若赋值运算符左右两侧类型不同&#xff0c;或者形参与实参类型不匹配&#xff0c;或…

rgba 兼容性处理

根据caniuse&#xff08;http://caniuse.com/#searchrgba&#xff09;&#xff0c;rgba兼容性为IE9以及以上浏览器。 实例代码&#xff1a; 1 <!doctype html>2 <html lang"en">3 4 <head>5 <meta charset"UTF-8" />6…

rgba无效php,ValueError:无效的RGBA参数:导致此错误的原因是什么?

我正在尝试使用来自:this stackoverflow post的想法创建一个三维彩色条形图。 首先,我使用以下代码创建一个三维条形图:import numpy as np import matplotlib.colors as colors import matplotlib.cm as cm import matplotlib.pyplot as plt from mpl_toolkits.mplot3d imp…

scss @for与rgba函数巧妙使用

SCSS for与rgba函数使用 这里再次记录下~~~ 文章目录 SCSS for与rgba函数使用效果图templatejsscss其他用法each参数变量...占位符选择器 %fooat-root 效果图 template <template><view class"list"><view class"item" :class"[item-…

RGBA: 了解

RGBA: 了解 rgba&#xff08;0&#xff0c;0&#xff0c;0&#xff0c;0&#xff09;四个值&#xff0c;前三个值的范围是0~255之间的整数或0-100的百分数 前三个值&#xff0c;描述的是三原色&#xff0c;最后一个则代表透明度选值在0~1之间&#xff1a; 0 表完全透明 0.5…

CSS3 RGBA颜色

前面我们一起探讨了一下CSS3 Gradient&#xff08;css3 渐变&#xff09;&#xff0c;今天我们一起来探讨一下CSS3中的RGBA。RGB对于大家来说一点不陌生&#xff0c;他就是红色R绿色G蓝色B&#xff0c;那现在我们所说的RGBA又是什么呢&#xff1f;说得简单一点就是在RGB的基础上…

CSS3 RGBA

转载自&#xff1a;http://www.w3cplus.com/content/css3-rgba 前面我们一起探讨了一下CSS3 Gradient&#xff08;css3 渐变&#xff09;&#xff0c;今天我们一起来探讨一下CSS3中的RGBA。RGB对于大家来说一点不陌生&#xff0c;他就是红色R绿色G蓝色B&#xff0c;那现在我们…

rgba的使用

rgba有四个值&#xff0c;前三个值都是数字&#xff0c;用来调颜色&#xff0c;最后一个值表示透明度&#xff0c;值在0-1。 1表示不透明&#xff0c;0表示透明&#xff0c;0-1之间可以调整透明的程度 最后值为0时 <!DOCTYPE html> <html><head><meta ch…