Maven自定义archetype生成项目骨架
,通过该插件可以自定义符合我们自己需求的archetype。
一:什么是Archetype
总之,原型是一个Maven项目模板工具包。一个原型被定义为从其中相同类型的所有其它事情是由一个原始图案或模型。名称配合,因为我们正在努力提供一种系统,该系统提供了一种生成Maven项目的一致的手段。原型将帮助作者为用户创建Maven项目模板,并为用户提供了手段,产生的这些项目模板参数化的版本。
使用原型提供了一个很好的方式,迅速使开发人员在与您的项目或组织采用最佳实践一致的方法。在Maven的项目中,我们使用原型,试图让我们的用户和运行尽可能快地通过提供展示许多的Maven的功能,同时引入新的用户通过采用Maven的最佳实践的示例项目。在几秒钟内一个新的用户可以有一个工作Maven项目作为跳板用于调查更多的功能,Maven中。我们也试图使原型机制添加剂和由我们的意思是允许一个项目的一部分被捕获在一个原型,使得项目的部件或方面可以被添加到现有的项目。这方面的一个很好的例子是Maven站点原型。如果,例如,您使用的快速启动原型生成一个工作项目,你可以迅速通过使用现有项目中的网站原型创建网站的项目。你可以做这样的事与原型。
您可能要在组织内部规范J2EE开发,所以你可能要提供原型为EJB,或者,或者您的Web服务的战争。一旦这些原型创建和部署在您的组织的资源库,他们都可以在组织内使用的所有开发人员。
上面是我根据maven官网在百度翻译出来的,大家将就着看,大概意思就是archetype是Maven项目模板工具包,也就是一个模板工程。
二:使用archetype创建项目
-
mvn archetype:generate
上面的命令执行后会输出很多maven官方提供的archetype,但是这些archetype生成的项目骨架都不能够满足我们的需求,所以这就需要我们自己开发一个archetype来满足我们自己的开发需求,下面我把我自己自定义这个archetype的过程记录一下方便日后回忆。
三:创建自定义的archetype项目
1.首先使用sts(spring的一款开发工具,下载地址到spring官网)创建一个maven project,然后把配置好的一些公用的东西放到相应的目录下面比如说会将一些常用的java代码存放到src/main/java目录下面;会将一些通用的配置文件放到src/main/resources目录下面;如果是javeEE工程,还会有一些jsp等等的文件存放到src/main/webapp目录下面,如下图所示:
2.然后在创建的maven project的pom.xml文件中添加archetype插件,如下面所示:
-
<project xmlns=”http://maven.apache.org/POM/4.0.0” xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance” -
xsi:schemaLocation=”http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd”> -
<modelVersion>4.0.0</modelVersion> -
-
<parent> -
<groupId>org.micaicms</groupId> -
<artifactId>micaicms-pom</artifactId> -
<version>1.0</version> -
</parent> -
-
<artifactId>micaicms-web-archetype</artifactId> -
<packaging>jar</packaging> -
-
<name>micaicms web archetype</name> -
<description>micaicms-web-archetype</description> -
-
<distributionManagement> -
<repository> -
<id>releases</id> -
<name>Micaicms Releases</name> -
<url>http://127.0.0.1:8081/nexus/content/repositories/releases/</url> -
</repository> -
<snapshotRepository> -
<id>snapshots</id> -
<name>Micaicms Releases</name> -
<url>http://127.0.0.1:8081/nexus/content/repositories/snapshots/</url> -
</snapshotRepository> -
</distributionManagement> -
-
<build> -
<pluginManagement> -
<plugins> -
<plugin> -
<groupId>org.apache.maven.plugins</groupId> -
<artifactId>maven-archetype-plugin</artifactId> -
<version>2.2</version> -
</plugin> -
<plugin> -
<groupId>org.apache.maven.plugins</groupId> -
<artifactId>maven-compiler-plugin</artifactId> -
<configuration> -
<source>1.5</source> -
<target>1.5</target> -
</configuration> -
</plugin> -
<plugin> -
<groupId>org.apache.maven.plugins</groupId> -
<artifactId>maven-resources-plugin</artifactId> -
<configuration> -
<encoding>UTF-8</encoding> -
</configuration> -
</plugin> -
</plugins> -
</pluginManagement> -
</build> -
-
</project>
3.运行你自己配置好的自定义的archetype项目
先执行mvn clean install
安装该archetype项目到你的本地仓库
发布该archetype项目到你的本地私服(nexus)
注意;这里如果你需要发布这个archetype到你的本地私服上去,那么需要在maven里面配置权限,主要是maven里面的settings.xml文件,我
的settings.xml文件配置如下,配置好以后就可以执行发布命令了
再执行mvn deploy
4.查看你刚才发布到nexus私服上去的archetype,如下图:
四:在eclipse/sts开发工具中配置你发布到私服上的自定义的archetype
1.打开你的开发工具,eclipse或者sts,我这里是sts
2.选择Window->Preferences->Maven->Archetypes
3.点击Add Remote Catalog,输入你的nexus私服中archetype的地址,我这里是
http://127.0.0.1:8081/nexus/content/groups/public/archetype-catalog.xml
输入Description,随便输入都可以,我这里是micaicms-web-archetype
4.点击Ok,点击Apply
5.重新启动你的开发工具eclipse或者sts
五:使用自定义的archetype生成自定义的项目骨架
1.选择New->Maven Project->Next
2.选择你配置好的archetype,如下图:
3.输入对应的groupId,artifactId,package,如下图:
因为我已经新建过该项目了,所以我这里不能点击Finish,你们的应该可以
4.最后生成的项目骨架如下图:
5.修改数据库配置文件,导入初始化sql脚本,如下图:
6.部署项目到tomcat下面访问即可,默认的访问路径为:ht:tp://localhost:8080/micaicms-ssmb/project/list
六:Maven的自定义archetype源码工程下载地址:
https://github.com/sxdtzhaoxinguo/micaicms-web-archetype
七:Maven的自定义archetype生成的基础项目骨架工程的下载地址:
https://github.com/sxdtzhaoxinguo/micaicms-ssmb
==============参考二=================================
http://www.tuicool.com/articles/Bruu2a
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
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