最近在修改自己项目的结构,然后尝试了用maven archetypes 生成项目模板,没什么大坑,记录一下手顺,给年纪大的自己备忘。

参考网站:
maven archetype 官方介绍
archetype插件
构建archetype发布到私服

1.创建模板

首先准备一个模板项目,就是比方说,你已经准备好了一些文件,写法啥的。在项目的pom.xml中添加 <distributionManagement>用于发布时候用

 <distributionManagement>
      <repository>
          <id>【setting.xml中配配置的servers里的serverId】</id>
          <name>【名字】</name>
          <url>【serverId对应的repository URL】</url>
      </repository>
      <snapshotRepository>
          <id>【同理】</id>
          <name>【同理】</name>
          <url>【同理】</url>
      </snapshotRepository>
  </distributionManagement>

在pom.xml同级目录下,使用mvn archetype:create-from-project对该项目生成模板。这个会对你现在的项目生成一个archetype目录树,在target/generated-sources/archetype 下。

如果是多模块的项目,就在根目录下的pom.xml添加上面的配置,并且在根目录下调用mvn archetype:create-from-project

archetype生成完成之后,我们就可以对原型进行调整了,和你的基础项目不搭噶了。generated-sources/archetype目录下的src文件下就是原型文件,原型文件里的一些值是通过参数传入的,可以修改,也可以在archetype-metadata.xml中指定(这样就是设定默认值,比方说修改默认version)。有一点要提醒的是,在这个目录下的pom.xml中,最好也添加刚刚添加的<distributionManagement>,在使用archetype的时候会用到。另外一点,目录generated-sources\archetype\src\main\resources\META-INF\maven下的archetype-metadata.xml 可以通过修改配置来生成模块(多模块)和文件,具体配置可以看一下官网archetype-metadata.xml

2. 发布模板到本地/私服

弄好自己的模板后,在生成的原型根目录下,执行mvn install 将模板原型安装到本地目录,如果是要发布到私服,先前配置好了的情况下,可以直接用mvn deploy发布。

3. 使用模板

使用发布好的模板,调用mvn archetype:generate 属性参数参考这里,提一下的是, archetypeCatalog 参数,如果是3.0.0以上的版本,参数指定的是 'local','remote','internal',以下的版本(2.4)可以指定repository url。官网中提到,使用remote的时候,一定要配置对应的 repository,先前的配置就是为这儿用的。默认是使用remote,local,remote找不到时候,就找本地maven库中的模板。

使用mvn archetype:generate 会先让你选择需要使用的模板,再进行构建,如果指定 archetypeGroupIdarchetypeArtifactId archetypeVersion参数值,就可以直接指定使用的模板了。

4.一些问题

问题:在mvn archetype:create-from-project报错,Invoker process ended with result different than 0!
解决: 应该在报错信息中看到一段话
The specified user settings file does not exist: /Users/XXX/.m2/settings.xml
把settings.xml放到.m2目录下就行了。
问题:无法找到私服上的发布的原型。
解决: 查看自己的server和repository配置,一定要对得上。不对就不行。
问题: 通过原型生成出来项目中的的pom.xml文件里多了好多空白行
解决:可能是操作系统编码的问题。我在windows上创建的本地模板就有空白行,发布到nexus后,使用远端的模板就没出现这个问题。


kasaya
16 声望9 粉丝

SLAYERS スレイヤーズ