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

article/2025/10/1 6:10:27

一、archetype简介

Archetype是一个Maven项目的模板工具包,它定义了一类项目的基本架构。Archetype为开发人员提供了创建Maven项目的模板,同时它也可以根据已有的Maven项目生成参数化的模板。通过archetype,开发人员可以很方便地将一类项目的最佳实现应用到自己的项目中。在一个Maven项目中,开发者可以通过archetype提供的范例快速入门并了解该项目的结构与特点。

Maven Archetype由下面几个模块组成:

maven-archetype-plugin:Archetype插件。通过该插件,开发者可以在Maven中使用Archetype。
archetype-packaging:用于描述archetype的生命周期与构建项目软件包
archetype-models:用于描述类与引用
archetype-common:核心类
archetype-testing:用于测试Maven Archetype的内部组件

下图是官方提供的Archetype的生命周期:
在这里插入图片描述Archetype插件有四个目标可以直接使用:

archetype:create(不推荐):从archetype 中创建一个Maven项目。
archetype:generate:从archetype 中创建一个Maven项目,需要开发人员在指定archetype,插件会从远程仓库中自动获取。
archetype:create-from-project:从已有的项目中生成archetype。
archetype:crawl:搜索并更新仓库中的archetype。

二、Archetype工程的组成

一个典型的archetype包含如下组成部分:

1)Archetype descriptor(archetype.xml),这个文件位于路径src/main/resources/META-INF/maven/,它列出了原型中包含的所有文件,并且给他们做了分类以便Archetype的生成机制可以正确的处理它们;
2)Archetype插件将要拷贝的原型文件,位于路径,src/main/resources/archetype-resources/
3)pom.xml原型文件,位于路径:src/main/resources/archetype-resources
4)这个工程本身自己的pom.xml

三、如何生成Archetype

有两种方法来创建Archetyp,第一种是通过已有的项目来创建,第二种是通过mvn archetype:generate创建一个简单的JAVA项目或WEB项目,然后进行改造。

这里就以SSM框架为例,来演示第一种方法,如何生成一个SSM骨架,至于如何搭建SSM框架,可参考这篇文章:http://blog.csdn.net/u011781521/article/details/53725788
在这里插入图片描述解压之后,修改POM.XML文件为如下:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.fendo.ssm</groupId><artifactId>fendo-SSM</artifactId><packaging>jar</packaging><version>0.0.1-SNAPSHOT</version><name>fendo-SSM Maven Webapp</name><url>http://maven.apache.org</url><!-- 初始化框架的版本号 --><properties><spring.version>4.3.3.RELEASE</spring.version></properties><pluginRepositories>   <pluginRepository>   <id>alfresco-public</id>    <url>https://artifacts.alfresco.com/nexus/content/groups/public</url>   </pluginRepository>    <pluginRepository>   <id>alfresco-public-snapshots</id>    <url>https://artifacts.alfresco.com/nexus/content/groups/public-snapshots</url>    <snapshots>   <enabled>true</enabled>    <updatePolicy>daily</updatePolicy>   </snapshots>   </pluginRepository>    <pluginRepository>   <id>beardedgeeks-releases</id>    <url>http://beardedgeeks.googlecode.com/svn/repository/releases</url>   </pluginRepository>   </pluginRepositories><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>3.8.1</version></dependency><!-- 加入ServletAPI --><!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api --><dependency><groupId>javax.servlet</groupId><artifactId>servlet-api</artifactId><version>2.3</version><scope>provided</scope></dependency><!-- MySQL依赖 start --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.38</version></dependency><!-- MySQL依赖 end --><!-- 加入MyBatis 依赖 start --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.2.5</version></dependency><!-- 加入MyBatis 依赖 end --><!-- Log4j start --><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version></dependency><!-- Log4j end --><!-- 引入Spring(包含SpringMVC) 依赖 start --><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-oxm</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-tx</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-aop</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context-support</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId><version>${spring.version}</version></dependency><!-- 引入Spring 依赖 end --><!-- 引用c3p0 依赖 start--><dependency><groupId>com.mchange</groupId><artifactId>c3p0</artifactId><version>0.9.2.1</version></dependency><!-- 引用c3p0 依赖 end--><!-- 引用插件依赖:MyBatis整合Spring --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>1.3.0</version></dependency><!-- JSTL --><dependency><groupId>jstl</groupId><artifactId>jstl</artifactId><version>1.2</version></dependency></dependencies><build><finalName>fendo-SSM</finalName><plugins><!-- 加入Tomcat插件 --><plugin><groupId>org.apache.tomcat.maven</groupId><artifactId>tomcat8-maven-plugin</artifactId><version>3.0-r1655215</version></plugin><!-- 加入maven-archetype-plugin插件 --><plugin>  <groupId>org.apache.maven.plugins</groupId>  <artifactId>maven-archetype-plugin</artifactId>  <version>2.0-alpha-4</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>  </plugins></build>
</project>

往里面添加maven-archetype-plugin,Maven-resources-plugins,maven-compiler-plugin插件。所以一般可先创建所需的maven项目,然后利用archetype plugin的create-from-project将maven项目将该maven项目生成为archetype类型项目。生成maven项目后并确定定型后,执行:

mvn archetype:create-from-project

注意:

在执行上面命令之前最好,把这一些.setting, .class, .project的文件删除掉,因为这是多余的,所以我们在搭建好样板工程之后,在使用mvn archetype:create-from-project命令之前,要先把项目中不相关的工程文件、中间文件删除。
在这里插入图片描述生成的archetype在此路径下:

target\generated-sources

此时会在该项目的target目录下发现如下文件:

---target---generated-sources---archetype---our project

在这里插入图片描述
四、生成Archetype如何安装

在上文创建了archetype之后,进入到target\generate-sources\archetype目录,然后在命令行执行:

mvn clean install

安装之后主要做了一件事情:

  1. 将文件安装到mvn缓存目录,在我本机就是G:\MavenRepository\com\fendo\ssm\fendo-SSM,该文件夹下的目录结构如下:
    | maven-metadata-local.xml
    |
    —0.0.1-SNAPSHOT
    fendo-SSM-0.0.1-SNAPSHOT.jar
    fendo-SSM-0.0.1-SNAPSHOT.pom
    maven-metadata-local.xml
    _remote.repositories

在target\generate-sources\archetype目录中执行crawl命令,生成archetype-catalog.xml:

mvn archetype:crawl

执行成功后会在G:\MavenRepository\archetype-catalog.xml中多出来一个骨架配置文件:

    <archetype><groupId>com.fendo.ssm</groupId><artifactId>fendo-SSM-archetype</artifactId><version>0.0.1-SNAPSHOT</version><description>fendo-SSM</description></archetype>

五、使用上自定义archetype
笔者推荐方法:
通过命令行使用

找到一个空目录,然后执行如下命令:

mvn archetype:generate -DarchetypeCatalog=local

此时会给出上文安装的archetype,选择即可,如下:在这里插入图片描述
输入编号,就可以了,这里就输入"2",选择SSM,然后输入GroupId,artifactId,就可以了
在这里插入图片描述
六、archetype命令

1.帮助命令:

archetype:help

2.爬取一个maven仓库,创建目录文件:

archetype:crawl

3.根据一个工程,创建一个新的archetype:

archetype:create-from-project

4.根据一个archetype,创建一个新的工程:

archetype:generate

5.根据当前的archetype工程,创建一个jar包:

archetype:jar

6.更新本地的maven目录:

archetype:update-local-catalog
参考地址:
http://maven.apache.org/guides/mini/guide-creating-archetypes.html
经过笔者亲自使用,创建,真的好用,推荐使用
本文转载自https://blog.csdn.net/u011781521/article/details/75194382


http://chatgpt.dhexx.cn/article/5PCVGP38.shtml

相关文章

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…

rgba无效php,rgba设置的背景透明没用啊

本来跟着老师的做的&#xff0c;设置了background-color: rgba(255,255,255,0.1);结果就成上边的样子了&#xff0c;求大神指导啊&#xff0c;啊啊啊啊.graySection .articlPreview .imgSection { width: 45%; } .imgSection img { width: 100%; } .graySection .articlPreview…

html边框白色实线rgba,CSS3 RGBA 属性高级用法

这个属性的兼容问题比较简单&#xff0c;IE8已经支持这个属性&#xff0c;IE6和IE7也可以通过hack支持。RGBA和CSS2里的RBG属性差不多&#xff0c;只是RGBA属性多了一个透明度的定义&#xff0c;CSS3标准里对RGBA属性的解释如下&#xff1a; /* 基本语法 */em { color: Rgba(re…

CSS中RGBA和渐变色

颜色值RGBA 我们熟悉的rgb颜色标准&#xff0c;是由r&#xff08;red&#xff09;、g&#xff08;green&#xff09;、b&#xff08;blue&#xff09;三种颜色叠加变化形成各种颜色 取值0-255&#xff0c;或0-100% rgba就是在rgb基础上增加了alpha不透明度参数 .demo {width…