Maven Archetype是一个项目模板工具包,可为开发人员提供生成内置或自定义脚手架工件的参数化版本的方法。 最近,我将其应用于我们的Xiliary P2存储库,以实现Eclipse模块存根创建的自动化。

由于效果很好,所以我认为值得在这篇文章中分享我的经验。

Maven原型

Maven Archetype使程序员可以根据项目或组织规定的惯例和最佳实践快速并一致地设置脚手架。 它带有一组预定义的模板,以简化常用结构的生成。

有关Maven提供的默认原型的列表,请参阅“原型简介”部分中的“ 提供的原型”

例如,可以基于原型maven-archetype-webapp生成Web应用程序项目存根:

mvn archetype:generate \
-DgroupId=com.codeaffine \
-DartifactId=com.codeaffine.webapp \
-Dversion=1.0-SNAPSHOT \
-DarchetypeGroupId=org.apache.maven.archetypes \
-DarchetypeArtifactId=maven-archetype-webapp \
-DarchetypeVersion=1.0 \
-DinteractiveMode=false

参数groupId,artifactId和version用于创建包含适当配置的项目对象模型定义( pom.xml )的项目根文件夹。 而archetypeXXX参数指定要使用的模板。 基于Web应用程序原型,Maven提供了一个pom,可将构建生命周期 packaging属性设置为war并生成以下目录和文件结构:

com.codeaffine.webapp
|-- pom.xml
`-- src`-- main|-- resources`-- webapp|-- WEB-INF|   `-- web.xml`-- index.jsp

如果您碰巧使用Eclipse的Maven集成,则可以为Maven项目选择“ 新建项目”向导 ,以生成派生自特定原型的Eclipse项目:

图像显示的选择创建的结构与上面的命令行示例相同。 此外,它提供Eclipse项目特定的文件和设置,并将生成的项目自动导入IDE的工作区中。

自定义原型创建

尽管预定义的模板可以快速入门,但显然不足以采用项目或组织特定的约定。 例如,Eclipse IDE允许在生成的支架结构内的文件中配置所有类型的设置。 因此,将这样的预设包括在定制原型中将是有帮助的。

幸运的是,Maven原型可以方便地创建自定义模板定义,如在线文档《创建原型指南》中所述。 但是,我发现从头开始建立原型比使用Dirk Reinemann所描述的create-from-project选项更为有效。

之所以能够做到这一点,是因为我已经有了一些可以用作原型的Eclipse插件,片段和功能。

我在GitHub上找到了tycho-eclipse-plugin-archetype定义,该定义提供了一个模板,用于一步生成带有测试片段和存储库站点的eclipse模块,这似乎为eclipse插件开发提供了一个很好的快速入门 。

从专案建立

要从给定的项目中创建Maven原型,请将其复制到工作目录中,并删除所有不应包含在原型包中的文件。 现在,此项目躯干提供了构成支架的所有文件和目录结构。

确保躯干的根文件夹还包含一个简单的 pom.xml如创建原型指南中的第一步所述。 之后,导航到pom所在的文件夹并执行以下命令:

mvn archetype:create-from-project

这将生成存储在子文件夹target/generated-sources/archetype的原型开发结构。 它包含一个新原型的pom,该原型源自放置在项目躯干根文件夹中的pom。 此外,还有一个子路径src/main/resources/archetype-resources ,其中包含脚手架结构和资源的副本。

src/main/resources/META-INF/maven/archetype-metadata.xml是ArchetypeDescriptor ,它列出了将包含在新创建的模板中的所有文件并对它们进行分类,因此可以通过生成机制对其进行正确处理。

现在可以打包原型,并首先尝试看看它是否按预期工作。 为此,导航到原型的pom所在的文件夹并运行:

mvn install

这样可以使原型在本地存储库中可用。 第一次使用它就像上面的Web应用程序示例中一样容易,并且看起来应该类似于以下代码片段:

mvn archetype:generate \
-DarchetypeArtifactId=foo.artefactId \
-DarchetypeGroupId=foo.groupId \
-DarchetypeVersion=foo.version

如果做得正确,Maven现在应该已经创建了一个项目存根,该存根与项目躯干中的对象基本相同。

调整项

不幸的是,还有更多的工作要做。 Eclipse插件,片段和功能部件提供了自己的元描述符,其中包含标识符,版本号,名称等。 当然,我们希望模板处理器合理地填充这些值。

Maven原型使用可以在ArchetypeDescriptor中声明的属性来处理此问题(请参见上文)。

<requiredProperties><requiredProperty key="identifier"></requiredProperty></requiredProperties>

现在,您可以使用以下语法在原型的任意资源中引用此属性:

[...]
Bundle-SymbolicName: ${identifier}
[...]

可以通过将属性设置为命令行的系统参数来完成属性的初始化,例如:

mvn archetype:generate \
-DarchetypeArtifactId=foo.artefactId \
-DarchetypeGroupId=foo.groupId \
-DarchetypeVersion=foo.version \
-Didentifier=foo.identifier \

插件和片段的另一个问题是例如.project定义文件引用的空或不存在的源文件夹。 Maven在模板处理期间会忽略空目录。 但是以下代码段显示了如何配置描述符以创建此类文件夹:

<fileSets><fileSet filtered="true" encoding="UTF-8"><directory>src</directory><includes><include>**/*.java</include></includes></fileSet>
[...]

有关描述符配置的更多详细信息,请参考在线文档 。

组装件

有了这些知识,我就可以为与Xiliary开发预设匹配的插件,测试片段和功能定义存根创建Maven原型工件。 这意味着每个存根都具有开箱即用的代码格式,执行环境,编译错误/警告首选项等特定设置。

出于灵活性的考虑,我决定使用三个单独的人工制品,而不是一个,并使用一个小脚本将它们连接在一起。 这是因为大多数时候我需要一步创建所有三个存根。 尽管这使Eclipse New Project向导无法使用,但这并不是什么大问题,因为唯一的好处就是自动存根的工作区导入。

剩下的唯一手动任务是在存储库的构建定义的父pom中注册新模块,以及在P2相关的catagory.xml添加新功能条目。

结论

这篇文章简要介绍了Maven Archetype,并展示了如何将其用于自动化Eclipse模块创建。 使用上述自定义原型后,现在大约需要一分钟的时间将带有插件和测试片段的新功能定义添加到工作区并生成定义。

与之前的手动创建,配置,复制和粘贴连载内容相比,在一分钟内完成开发和构建还不错……因此,您想自己看看原型源,定义位于com.codeaffine.xiliary.archetype GitHub上Xiliary储存库的com.codeaffine.xiliary.archetype项目。

翻译自: https://www.javacodegeeks.com/2014/11/efficient-creation-of-eclipse-modules-with-maven-archetype.html

使用Maven原型高效创建Eclipse模块相关推荐

  1. maven原型_创建自定义Maven原型

    maven原型 Maven原型是项目模板,可以帮助我们根据其类型快速创建maven入门项目 . 这是一个不费吹灰之力地引导Maven项目的好工具. 我们可以使用多种原型. 一些流行的原型包括– mav ...

  2. 基于maven使用IDEA创建多模块项目

    原文地址:http://blog.csdn.net/williamhappy/article/details/54376855 鉴于最近学习一个分布式项目的开发,讲一下关于使用IntelliJ IDE ...

  3. maven安装与创建多模块项目【转】

    maven是一个比较流行的项目管理工具,在最近参与的项目中,也使用了maven,本文主要对在项目中的使用做一个总结,主要涉及maven的安装于配置.maven创建多模块项目. 1.maven安装与配置 ...

  4. 创建自定义Maven原型

    Maven原型是项目模板,可以帮助我们根据其类型快速创建maven入门项目 . 这是一个非常省力的引导Maven项目的好工具. 有许多可供选择的原型. 一些流行的原型包括– maven-archety ...

  5. eclipse创建多模块maven工程小结

    创建maven工程步骤 1 新建一个maven工程,如下图所示: 2 选择项目名称(或项目目录),如下图所示: 3 填写maven工程相关信息,注意父maven工程的packing方式是pom,如下图 ...

  6. maven原型_Maven原型创建技巧

    maven原型 我最近需要为姜黄SOA项目创建一些Maven原型. 对于不了解的人来说, Maven原型是一种基于一些预先罐装的项目模板生成项目的方法. 对于当前的姜黄SOA原型,它将创建一个多模块M ...

  7. Maven原型创建技巧

    我最近需要为姜黄SOA项目创建一些Maven原型. 对于不了解的人来说, Maven原型是一种基于一些预先罐装的项目模板生成项目的方法. 对于当前的姜黄SOA原型,它将创建一个多模块Maven项目,该 ...

  8. 天生一对Maven2+Jetty -- Maven2创建并管理WebApp,并使用Maven Jetty Plugin在Eclipse中调试...

    天生一对"Maven2+Jetty" -- Maven2创建并管理WebApp,并使用Maven Jetty Plugin在Eclipse中调试 Maven2代比1代改进很多,其中 ...

  9. 【MAVEN】如何在Eclipse中创建MAVEN项目

    目录结构: contents structure [+] 1,Maven简介 2,Maven安装 2.1,下载Maven 2.2,配置环境变量 2.3,测试 3,Maven仓库 3.1,Maven仓库 ...

最新文章

  1. 本地连接受限制或无法连接怎么办?
  2. ASP.NET 2.0 - 如何把上传的文件保存到数据库字段 (转自章立民CnBlogs)
  3. likelihood(似然) and likelihood function(似然函数)
  4. 更改setting文件的mirror_setting.xml的mirror、mirrorOf和pom.xml的repositories、repository的关系关联*...
  5. 内表数据写到服务器上
  6. python 人脸轮廓提取_实现人脸识别、人脸68个特征点提取,或许这个 Python 库能帮到你!...
  7. SAP OData schema version and backend version
  8. CodeForces 525C Ilya and Sticks 贪心
  9. 高等组合学笔记(五): 加括号问题,集合的分类问题,多项式恒等式的组合证明
  10. 自动清除html无用css,TinyMCE粘贴HTML代码,避免style属性被自动清除_html/css_WEB-ITnose...
  11. Python基础之初识类和对象
  12. python可以处理什么文件_第十五篇 Python之文件处理
  13. 樱花FRP(SAKURA FRP)远程桌面+rdpwrap绕过限制
  14. 数据库视图效率低下一例
  15. 什么是宽带薪酬?宽带薪酬系统如何实施?
  16. 鸿蒙系统主题如何自定义,自定义流式布局
  17. python提取图片中的文字
  18. 计算单词的长度C++
  19. JAVA实现SMS短信发送(附:代码)
  20. 缠中说禅《论语》详解:给所有曲解孔子的人

热门文章

  1. 第13步 用户模块前端(Admin)
  2. basemap安装_Python画地图逃不过的basemap「完全安装手册」 | 附下载
  3. 学院派 实践派 计算机科学与技术,饶旻现场为boss所在企业“挑错”
  4. 生物信息 python 书籍_用python做生物信息数据分析(1-环境准备)
  5. ping 命令使用代理_网络检测知识篇:ping命令使用知识,你知道几点?
  6. qmc0转换mp3工具_GoldenRecords for Mac(唱片录音转换软件)
  7. 奇技淫巧:在spring官网上下载历史版本的spring插件,springsource-tool-suite
  8. switch字符串jdk_JDK 12 Early Access Build 12中的原始字符串文字支持
  9. jax-ws和jax-rs_带有JAX-WS和Spring的Web服务应用程序
  10. java 自定义运算符_Java中集合的自定义运算符