乐者为王

Do one thing, and do it well.

从已有项目创建Maven archetype

手里有这样的一个项目,其它项目都基于该项目创建,只是对包名做些修改,还有就是替换部分图片和文本内容。每次手工重复类似的修改工作很是繁琐,简直让人发指,需要寻找自动化的解决方案。

Maven界有这么一句话:遇到重复的Maven项目初始配置,就创建自己的archetype。其实不光是Maven项目,其它也是如此。《测试驱动开发》中有个Triangulation法则,《重构》中也有Rule of three,都是用来指导如何解决类似重复问题的。第一次是特殊解决,第二次还是特殊解决,第三次就要抽象解决了。

Maven Archetype Plugin允许从当前存在的项目创建archetype,这样以后用户就可以基于该archetype创建项目了。

那么如何通过现有的项目创建archetype呢?首先清理项目中那些不必要的文件和目录,然后在根目录下执行:

1
2
3
mvn archetype:create-from-project
cd target/generated-sources/archetype
mvn clean install  # 本地安装

现在就可以使用上面创建的archetype来建立新项目了。在新的目录中执行以下命令即可:

1
2
3
4
5
6
7
8
mvn archetype:generate                          \
  -DarchetypeCatalog=local                      \
  -DarchetypeGroupId=<archetype-groupId>        \
  -DarchetypeArtifactId=<archetype-artifactId>  \
  -DgroupId=<your-groupId>                      \
  -DartifactId=<your-artifactId>                \
  -Dpackage=<your-package>                      \
  -Dversion=1.0

这里要注意的是,不要在target/generated-sources/archetype目录下运行上述命令,否则会生成失败,报如下错误:

1
2
3
[ERROR] Failed to execute goal archetype:generate:
  org.apache.maven.archetype.exception.InvalidPackaging:
  Unable to add module to the current project as it is not of packaging type 'pom'

Comments