Maven Archetype自定义工程原型/添加远程Archetype原型/通过maven-archetype-plugin插件创建Archetype原型(Eclipse中,其他IDE同理)

1.自定义工程模板

1.1问题

在Eclipse中,我们想创建一个web项目,使用web-app脚手架进行创建,但是里面的模板并不是我们想要的
比如我想自定义pom.xml里面的内容,设定jdk版本,groupID等等,配置Web项目基本依赖
以及我想要设置一个基本的index.jsp(符合基本模板的) 和 web.xml中设置web-app的版本为3.1

这些都不是web-app 1.0版本能够帮我们解决的事,那么我们能不能自定义个Maven Archetype工程模板呢?

1.2解决

参考:maven项目模板修改优化

1.2.1 找到自己存储相应模板的Maven仓库路径

首先看到GroupID,直接去找 {前面是你自己的Maven仓库路径}\org\apache\maven\archetypes

可以看到相应的模板均在此处

1.2.2 这里感谢大佬提供的思路,自己重头写一个模板太过麻烦,我们可以直接利用其现成的模板来修改

先进入1.0版本的目录,看到 maven-archetype-webapp-1.0.jar

将其解压至目录 maven-archetype-webapp-1.0

有两个文件,进入第一个 archetype-resources

内部便是设定的模板文件了,可以根据自己的需求进行更改

1.2.3 更改完毕后,进行打包jar操作,注意备份文件

做好修改后,进入解压的文件夹根目录,需要用到命令行来生成jar包,
jar cvf maven-archetype-webapp-1.4.jar archetype-resources

然后能够看到在该文件夹下生成了所需jar包,但是还没结束,我们需要把解压出来的META-INF中的maven文件夹添加到新生成的jar包中。

然后新建一个1.4文件夹

将1.0版本所有的东西复制到1.4目录下

修改文件名(必须后缀改为-1.4),并且修改maven-archetype-webapp-1.4.pom中的版本信息为1.4

1.3 Eclipse新增模板

1.3.1 新建Maven工程,点击新增模板

1.3.2 填入GroupID 和 ArtifactID 为 org.apache.maven.archetypesmaven-archetype-webapp,并且选择版本为1.4

新增完成

1.3.3 据我观察,这里的版本在这里只能同时存在一个,新的会覆盖掉旧的(同GroupID 和 同ArtifactID),可能是这里还有一些设置没有改好,但是够用即可!

如果想要用之前的1.0版本的话,可以在Interal中找到

1.3.4 续上面的坑,这里忘记关闭show the lastversion of Achetype only了,关掉后就能找到所有版本了!

1.3.5修改目录结构

在META-INF/maven目录下,有一个archetype.xml文件,可以根据需要自行修改,这个文件就是定义结构的文件:

<archetype>
  <id>webapp</id>
  <resources>
    <resource>src/main/webapp/index.jsp</resource>
    <resource>src/main/webapp/WEB-INF/web.xml</resource>
  </resources>
</archetype>

2.添加远程Archetype模板

参考:Eclipse:Maven项目的Archetype如何添加?

2.1 在Properties>Maven>Archetype中,选择 add remote...

2.2 输入相应的地址和介绍

Catalog File:https://repo1.maven.org/maven2/archetype-catalog.xml
Desccription:maven_catalog

2.3 选择Enable all,然后Apply即可

3.eclipse通过maven-archetype-plugin插件创建项目原型

参考:eclipse通过maven-archetype-plugin插件创建项目原型

3.1打开eclipse建立项目,并将项目配置为初始化状态,

并将项目的pom.xml文件的version从SNAPSHOT修改为RELEASE(一定要修改为RELEASE,否则后面会出问题);在pom.xml中引入相应插件坐标

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

参考:使用Maven Archetype插件快速生成Java项目脚手架
maven-archetype-plugin提供了一个属性配置可以帮助我们实现该能力。在原始项目的根目录(或者你喜欢的其它目录)编写一个.properties文件:

# 原型的坐标 必须声明
archetype.groupId=cn.felord
# 最好按照约定以-archetype结尾
archetype.artifactId=template-archetype
archetype.version=1.0
# 需要忽略的文件夹和文件类型 英文逗号隔开
excludePatterns=**/.idea/**,**/*.iml

3.2右键项目-->Run as Configuration-->Goals中

输入maven命令:archetype:create-from-project
如果有Properties文件设置, 输入 : archetype:create-from-project -Darchetype.properties=./archetype.properties
如果不想手动指定配置文件,也可以直接在Maven坐标中配置相应属性,这个配置文件请建在项目根目录下

<plugin>                                                 
	<groupId>org.apache.maven.plugins</groupId>          
	<artifactId>maven-archetype-plugin</artifactId>      
	<version>3.2.0</version>                             
	<configuration>                                      
		<propertyFile>archetype.properties</propertyFile>
		<encoding>UTF-8</encoding>                       
	</configuration>                                     
</plugin>                                                

生成如下文件夹:

3.3.cmd进入本地资源包 %项目路径%target/gengerated-source/Archetype目录;

3.4 cmd运行maven命令:mvn install ,安装到本地仓库;

3.5 cmd运行maven命令:mvn deploy ,安装到远程仓库;

ps:target/gengerated-source/Archetype目录下的pom.xml中必须加入distributionManagement标签,否则将会deploy失败,distributionManagement标签中的信息要和settings.xml中的server,repository信息对应,标签内设置的远程仓库类型必须是hosts宿主仓库,否则会deploy失败,并return code 400

<distributionManagement>
	<repository>
		<id>releases1</id>
		<name>Releases</name>
		<url>http://maven.******.com/nexus/content/repositories/releases/</url>
	</repository>		
</distributionManagement>

3.6 查看本地或远程仓库根目录中的archetype-calalog.xml文件,发现会多出一组archetype标签,查看标签中的信息是否跟archetype原型项目的信息是否一致,如果一致则代表生成原型成功;

  <archetype>
      <groupId>${groupId}</groupId>
      <artifactId>${artifactId}</artifactId>
      <version>0.0.1-RELEASE</version>
      <description>${description}</description>
   </archetype>

3.7 点击Window-->Preferences-->Maven-->Archetypes-->Add Local Catalog | Add Remote Catalog-->指定本地catalog.xml路或远程catalog.xml的url-->ok, 如果没有看到请勾选如下选项

3.8 这里一直存在一个问题:就是空文件夹并不能生成至Archetype原型中,目前我还并没有解决这个问题!

4.降低Archetype版本

4.0 (该方法失败)

请找到user目录下的.m2文件夹下>archetype-catalog.xml
在里面删除不需要的Archetype或者手动更新版本

现在写一个能成功的方法

4.1 先在本地Maven仓库删除自己不需要的版本

4.2 在Window>show views>中选择 Maven>Maven Respositories

4.3 根据自己需要rebuild index, 据我测试,一直卡在0%,这个时候直接暂停该进程,等下直接Maven update

4.4 选择Maven update, 重新建立索引

posted @ 2024-03-19 12:38  DawnTraveler  阅读(233)  评论(0编辑  收藏  举报