Maven之自定义archetype生成项目骨架

2023-10-30

http://blog.csdn.net/sxdtzhaoxinguo/article/details/46895013
摘要:使用过Maven的人都知道maven中有许多功能都是通过插件来提供的,今天我们来说一下其中的一个插件:maven-archetype-plugin

,通过该插件可以自定义符合我们自己需求的archetype。


一:什么是Archetype

总之,原型是一个Maven项目模板工具包。一个原型被定义为从其中相同类型的所有其它事情是由一个原始图案或模型。名称配合,因为我们正在努力提供一种系统,该系统提供了一种生成Maven项目的一致的手段。原型将帮助作者为用户创建Maven项目模板,并为用户提供了手段,产生的这些项目模板参数化的版本。


使用原型提供了一个很好的方式,迅速使开发人员在与您的项目或组织采用最佳实践一致的方法。在Maven的项目中,我们使用原型,试图让我们的用户和运行尽可能快地通过提供展示许多的Maven的功能,同时引入新的用户通过采用Maven的最佳实践的示例项目。在几秒钟内一个新的用户可以有一个工作Maven项目作为跳板用于调查更多的功能,Maven中。我们也试图使原型机制添加剂和由我们的意思是允许一个项目的一部分被捕获在一个原型,使得项目的部件或方面可以被添加到现有的项目。这方面的一个很好的例子是Maven站点原型。如果,例如,您使用的快速启动原型生成一个工作项目,你可以迅速通过使用现有项目中的网站原型创建网站的项目。你可以做这样的事与原型。


您可能要在组织内部规范J2EE开发,所以你可能要提供原型为EJB,或者,或者您的Web服务的战争。一旦这些原型创建和部署在您的组织的资源库,他们都可以在组织内使用的所有开发人员。


上面是我根据maven官网在百度翻译出来的,大家将就着看,大概意思就是archetype是Maven项目模板工具包,也就是一个模板工程。


二:使用archetype创建项目

[html]  view plain  copy
  1. 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插件,如下面所示:

[html]  view plain  copy
  1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  2.     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">  
  3.     <modelVersion>4.0.0</modelVersion>  
  4.   
  5.     <parent>  
  6.         <groupId>org.micaicms</groupId>  
  7.         <artifactId>micaicms-pom</artifactId>  
  8.         <version>1.0</version>  
  9.     </parent>  
  10.   
  11.     <artifactId>micaicms-web-archetype</artifactId>  
  12.     <packaging>jar</packaging>  
  13.   
  14.     <name>micaicms web archetype</name>  
  15.     <description>micaicms-web-archetype</description>  
  16.   
  17.     <distributionManagement>  
  18.         <repository>  
  19.             <id>releases</id>  
  20.             <name>Micaicms Releases</name>  
  21.             <url>http://127.0.0.1:8081/nexus/content/repositories/releases/</url>  
  22.         </repository>  
  23.         <snapshotRepository>  
  24.             <id>snapshots</id>  
  25.             <name>Micaicms Releases</name>  
  26.             <url>http://127.0.0.1:8081/nexus/content/repositories/snapshots/</url>  
  27.         </snapshotRepository>  
  28.     </distributionManagement>  
  29.   
  30.     <build>  
  31.         <pluginManagement>  
  32.             <plugins>  
  33.                 <plugin>  
  34.                     <groupId>org.apache.maven.plugins</groupId>  
  35.                     <artifactId>maven-archetype-plugin</artifactId>  
  36.                     <version>2.2</version>  
  37.                 </plugin>  
  38.                 <plugin>  
  39.                     <groupId>org.apache.maven.plugins</groupId>  
  40.                     <artifactId>maven-compiler-plugin</artifactId>  
  41.                     <configuration>  
  42.                         <source>1.5</source>  
  43.                         <target>1.5</target>  
  44.                     </configuration>  
  45.                 </plugin>  
  46.                 <plugin>  
  47.                     <groupId>org.apache.maven.plugins</groupId>  
  48.                     <artifactId>maven-resources-plugin</artifactId>  
  49.                     <configuration>  
  50.                         <encoding>UTF-8</encoding>  
  51.                     </configuration>  
  52.                 </plugin>  
  53.             </plugins>  
  54.         </pluginManagement>  
  55.     </build>  
  56.   
  57. </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

 


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Maven之自定义archetype生成项目骨架 的相关文章

  • eclipse中导入项目文件夹图标

    我在 Eclipse 工作区中新导入的 Maven 项目有J and M项目文件夹顶部的图标 项目和包资源管理器 而其他导入的 Maven 项目只有一个J icon 有人可以解释其中的区别吗 该项目有J装饰器被称为 Java 项目和具有M装
  • JSF Maven Mojarra 实施

    我尝试使用 JSF Eclipse 和 Maven 创建简单的项目 我用了
  • Artifact 尚未打包 - maven-dependency-plugin

    当我构建一个多模块 Maven 项目时 使用mvn clean compile 其中使用 dependency copy 将一个依赖项 构建反应器的一部分 复制到另一个依赖项中 然后 Maven 抱怨以下错误 Artifact has no
  • 如何强制sonatype Nexus 3为maven存储库重新创建maven-metadata.xml?

    I use sbt将新工件发布到 nexus maven2 存储库 my maven repo 新的文物出现在 Nexus 界面中 另一个 sbt 项目使用了这些人工制品 当使用精确要求时 他找到了那些 但是当使用范围时 他获取可用工件的列
  • 无法将 Maven 项目导入 IntelliJ IDEA

    我在将任何 Maven 项目导入 IntelliJ IDEA 时遇到问题 我创建一个空的 Maven 项目 如下所示 mvn archetype generate DgroupId com mycompany app DartifactId
  • 降低 Sonar 2.1.x 中的日志级别

    我有一个 Maven 3 x 版本 它使用 Sonar 2 1 x 进行质量控制 maven sonar 插件在 Jenkins 内部使用来运行声纳检查 在 Jenkins 构建过程中 当 Sonar 启动时 它会在 INFO 级别记录很多
  • rpm-maven-plugin 中的外部脚本是否可以访问 Maven 属性

    在外部postinstallScriptlet如下 有没有办法访问maven属性 例如 project artifactId pom xml 文件包含以下代码片段
  • 带有 mvn devserver 的 Google App Engine Java 失败:缺少“guestbook/target/guestbook-1.0-SNAPSHOT”

    我试图通过简单的使用 Java 的 Google App Engine 教程 https developers google com appengine docs java gettingstarted ui and code 但是当我尝试
  • 如何使用ivy本地仓库作为maven仓库

    ivy 本地存储库位于 ivy2 中 我想将其用作本地 Maven 存储库 有没有像设置这样简单的方法来做到这一点 我怀疑你想要做的是共享 ivy 的缓存 而不是本地存储库 通过调用将文件放置在ivy的存储库中发布任务 http ant a
  • 如何从 docker 运行 Maven 包装器?

    我必须从 dockerfile 运行 Maven 包装器命令 但我不知道该怎么做 当我尝试这样写时 RUN mvnw s settings xml clean install 这个命令不起作用 我有错误mvnw not found 我的泊坞
  • Maven 快速入门指南 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我的任务是为工作中的新程序设置开发环境 领导者选择 Eclipse 作为其 OSGi 支持的 IDE 并选择 Maven 作为构建实用程序
  • Spring 4.2.3.RELEASE 和 Hibernate 5.0.4.Final 兼容性问题

    有人一起配置 Spring 4 2 3 RELEASE 和 Hibernate 5 0 4 Final 吗 Spring 的官方文档说从 4 2 版本开始 spring 开始支持 Hibernate 版本 5 但是如果将它们配置在一起 我总
  • 如何使用 maven 或 pom.xml 更新属性文件

    我创建了一个自动化框架 在其中读取属性文件 config properties 中的值 我的 config properties 文件包含以下内容 BrowserName browser Environment env 我正在从属性文件中读
  • Java Spring Rest 验证配置属性访问

    我有一个 Spring JSON RestAPI 它使用注释驱动的输入验证 Valid 当我尝试验证另一个对象内的对象时 出现以下错误 java lang IllegalStateException JSR 303 validated pr
  • Maven WebApp META-INF context.xml

    我正在使用 Maven 3 并且尝试在 webapp 文件夹下添加 META INF 文件夹 所以我正在尝试执行以下操作 src main webapp META INF context xml WEB INF 下面是我的 POM 文件
  • Spring 5.0.3 依赖问题

    升级到 spring 5 0 3 后我遇到以下问题 09 25 29 141 ERROR org jboss msc service fail ServerService Thread Pool 175 MSC000001 Failed t
  • maven 3:访问​​“root”企业 POM 版本

    使用 Maven 3 0 4 我的任务是为我们的组织提供企业父级 POM 我的团队将为开发人员在使用此 POM 时遇到的疑问或问题提供支持 他们通常会将构建日志附加到支持票证中 因此 我希望我的公司 POM 将公司父级的版本回显到任何构建的
  • 如何从 jenkins 的现有项目生成 .hpi 插件

    我正在尝试使用 jenkins 的性能插件 但最新版本存在一些问题 如链接中所述 https issues jenkins ci org browse JENKINS 27100 https issues jenkins ci org br
  • Maven 未运行 Spring Boot 测试

    我有一个要测试的 Spring Boot REST API 我可以在 Eclipse 中手动运行测试 无需 Maven 并通过将应用程序作为 JUnit 测试运行 它运行良好并显示结果 但是mvn test正如您将在下面发现的那样 它不起作
  • cucumber.json 报告被重新运行场景报告覆盖

    我有一个具有相同技术堆栈 JAVA1 8 Cucumber JVM JUnit Maven 的 UI 测试项目和一个 API 测试项目 这两个项目都向我展示了这个问题 可能是因为两者都存在相同的依赖关系集 我使用了使用 maven sure

随机推荐