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解决
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.archetypes
和 maven-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或者手动更新版本
现在写一个能成功的方法