Maven插件之maven-archetype-plugin

学过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

Maven插件之maven-archetype-plugin

interactiveMode交互模式,默认为true,在交互模式下运行命令,要求用户指定选用的原型,以及生成项目模版的groupId、artifactId、version、package等属性,否则执行失败

archetypeCatalogArchetype查找规则;

archetypeRepository仓库URL地址;不指定,则默认从*库查找;

archetypeGroupId原型的groupId;默认值为org.apache.maven.archetypes

archetypeArtifactId原型的artifactId;默认值为maven-archetype-quickstart

archetypeVersion原型的version;默认值为1.0

 

如果interactiveMode属性设置为false(或使用Maven参数-B),则为批处理模式。此时需要指定如下参数

Maven插件之maven-archetype-plugin

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

 

 

Maven插件之maven-archetype-plugin

上一篇:浅析聊天机器人的技术和前景


下一篇:【英文演讲】What are your strength