学过Maven的人,都知道用MyEclipse的Maven插件生成一个项目骨架,比如maven-archetype-quickstart,这个原型就是最常用的之一。
刚开始使用骨架的时候,感觉很好,减少了重复劳动,提高了开发效率。使用的时间久了,就会发现,Maven Archetype提供的项目骨架不能百分百的满足公司规定的项目结构,不免要手动改些东西。
此时,自然而然的就会想到:如果能将公司(或项目组)规定的项目结构作为一个骨架原型上传个私服,作为模版供项目使用,就无须修改任何的文件。也减少了项目环境搭建时间、降低了出错率等。
简单的创建和使用maven-archetype-plugin的方法,可参考:http://www.colorfuldays.org/tag/archetype/ 写的简单,但是说的很明白。
1、进入模版项目的根目录,执行命令:mvn archetype:create-from-project 生成以该项目为模版的项目原型(archetype),具体的项目结构在target/generated-sources目录下; 注意:生成的archetype包含模板项目中所有的文档,避免冗余,可将多余文件删除,并对其项目结构做一些整理!!! a、修改archetype目录下pom.xml,将archetype的名称修改成你喜欢的; b、可将文件夹改成_rootArtifactId_,这样生成项目结构时,这个目录名称就会变成新的项目名称了; 这些都整理好了之后,可以将其发布到nexus仓库供其它同事使用了,发布的方法如下: 2、在archetype目录下的pom.xml中添加maven仓库配置: <distributionManagement> <repository> <id>releases</id> <url>http://192.168.10.254:8081/nexus/content/repositories/releases</url> </repository> <snapshotRepository> <id>snapshots</id> <url>http://192.168.10.254:8081/nexus/content/repositories/snapshots</url> </snapshotRepository> </distributionManagement>
3、发布archetype,到${basedir}/target/generated-sources/archetype目录下,执行命令: mvn deploy
4、使用该原型创建新项目,任意目录下执行命令: mvn archetype:generate -DarchetypeGroupId=com.ktr -DarchetypeVersion=1.0 -DarchetypeArtifactId=ktr-archetype |
注:表格的内容为转载。
以上的方法基于私服(Nexus),如果没有私服,可以参考http://maven.apache.org/archetype/maven-archetype-plugin/advanced-usage.html
详细介绍了如何快速创建和使用Archetype。
(最佳实践)
实际应用中,项目组(或者部门/公司)会有自己的私服,因此以下的介绍前提条件是配有自己的私服。
第一步:选择模版项目,生成原型。
选择生成Archetype的模板项目,运行命令:mvn clean archetype:create-from-project
命令参数可参考http://maven.apache.org/archetype/maven-archetype-plugin/create-from-project-mojo.html
但实际应用中,模板项目选好后,一般无须指定任何参数。
此时项目的Archetype已经生成,位于${basedir}/target/generated-sources/archetype/目录下。
第二步:将Archetype上传到私服,共享给其他人使用(需要有deploy权限和scm配置)。
到${basedir}/target/generated-sources/archetype/目录下执行命令:mvn deploy
将该原型上传到私服,此时前期工作完成,以后可以使用该原型生成项目骨架。
第三步:使用Archetype生成项目骨架。
任意目录下,执行命令:
mvn archetype:generate
-DinteractiveMode=false
-DarchetypeCatalog=internal,remote
-DarchetypeRepository=http://172.24.2.22:9081/nexus/content/groups/public
-DarchetypeGroupId=com.ktr
-DarchetypeArtifactId=java-project-template-archetype
-DarchetypeVersion=1.1-SNAPSHOT
-DgroupId=com.ktr
-DartifactId=ktr-t
-Dversion=0.1-SNAPSHOT
-Dgoals=compile
(命令应该在一行,为了方便查看,故分开多行)
命令参数的详细说明:
http://maven.apache.org/archetype/maven-archetype-plugin/generate-mojo.html
interactiveMode:交互模式,默认为true,在交互模式下运行命令,要求用户指定选用的原型,以及生成项目模版的groupId、artifactId、version、package等属性,否则执行失败;
archetypeCatalog:Archetype查找规则;
archetypeRepository:仓库URL地址;不指定,则默认从*库查找;
archetypeGroupId:原型的groupId;默认值为org.apache.maven.archetypes;
archetypeArtifactId:原型的artifactId;默认值为maven-archetype-quickstart;
archetypeVersion:原型的version;默认值为1.0;
如果interactiveMode属性设置为false(或使用Maven参数-B),则为批处理模式。此时需要指定如下参数
groupId:生成项目的groupId;必选;
artifactId:生成项目的artifactId;必选;
version:生成项目的version;默认值1.0-SNAPSHOT;
package:生成项目的源码包结构;默认值使用${groupId};
basedir:项目生成的目录;默认值为当前目录;
此时,第三步的命令可简化为:
mvn archetype:generate
-DinteractiveMode=false
-DarchetypeGroupId=com.ktr
-DarchetypeArtifactId=java-project-template-archetype
-DarchetypeVersion=1.1-SNAPSHOT
-DgroupId=com.ktr
-DartifactId=ktr-t
补充说明:
通过MyEclipse的Maven插件生成项目骨架时,其直接连接*库,无法连接私服,因此不能使用自定义的项目原型,而应该使用Maven命令行来生成项目骨架。
参考:
http://www.colorfuldays.org/tag/archetype/
http://maven.apache.org/archetype/maven-archetype-plugin/
http://maven.apache.org/archetype/maven-archetype-plugin/advanced-usage.html
http://maven.apache.org/archetype/maven-archetype-plugin/create-from-project-mojo.html
http://maven.apache.org/archetype/maven-archetype-plugin/generate-mojo.html
http://maven.apache.org/archetype/maven-archetype-plugin/examples/generate-batch.html
http://maven.apache.org/archetype/maven-archetype-plugin/specification/generate.html
http://maven.apache.org/archetype/maven-archetype-plugin/specification/archetype-catalog.html