创建Maven原型,自从开始使用Maven以来,从基本的Maven原型创建了我们的项目结构后,我认为是时候开实现这个过程了。它并不太痛苦,但也不像我希望的那样直截了当,所以我认为值得写一篇关于我的经历的文章.

创建一个 Java 项目并将文件复制到那里然后转换项目到 Maven 项目,之后就随心所欲了。

创建Maven原型 ,使用属性名称

创建原型的困难部分是让属性名称显示在整个代码中。我已经按照其他网站上的说明进行操作,这些网站提到了 __my-property-name__ 约定以使其正常工作。但是,按照 Maven 网站上的说明进行操作后, 我发现无法从生成的项目中更新文件。

经过更多搜索后,发现了 archetype-metadata.xml 文件,该文件似乎非常重要。一旦将其添加到系统中,发现我的属性名称开始解析为它们的预期值。它还让我有机会添加其他参数,例如示例中使用的 projectName。我发现如果你想将属性名称放在文件名或目录名中,那么你需要使用 __my-property-name__ 约定,但在文件中你需要使用 ${my-property-name} 约定。

archetype-metadata.xml 文件还意味着我可以取消 Maven 教程中建议的 archetype.xml 文件。对于此文件,您必须准确说明要将哪些文件包含到项目中,但是通过为 archetype-metadata.xml 文件的包含标记指定 **/*,它包含了该文件夹中的所有文件,而无需更新每次文件更改时的配置。

Velocity 和 If 声明

maven构建使用速度模板引擎,这意味着您对可以做什么有很大的控制权。这里不打算详细介绍 Velocity 的功能,因为这里有一个非常好的 网站

简单聊聊 if 语句功能。这真的很牛逼,因为我最初开始根据我正在创建的项目类型创建单独的原型。然后我很快意识到其中很多共享相同的结构和文件,因此通过混合使用新的项目类型所需参数(如上所述)和 velocity if 语句,设法将它们中的大部分合并为一个原型。语句示例如下所示,也可以使用关键字#else。

#if( ${projectType} == "cms" || ${projectType} == "ecommerce" ) 
private int myNewVariable;
#end

添加空文件夹

当我试图将空文件夹添加到 archetype-resources 部分但它们没有出现在生成的项目中时,这让我卡住了一段时间。答案是将它们作为文件集包含在 archetype-metadata.xml 中,就像我在带有“/src/main/webapp”文件夹的示例原型中所做的那样。

<fileSet filtered="true" encoding="UTF-8">
    <directory>src/main/webapp</directory>
</fileSet>

从原型创建项目

我使用 Eclipse 作为我的开发环境,如果你使用 NetBeans 或其他开发工具,这部分会略有不同。为了从项目中创建原型,只需右键单击 POM 文件并选择运行 Maven 安装即可。

然而,从原型创建一个新项目有点棘手,因为当您从列表中选择原型时,它并不存在。我必须使用页面上的“添加原型”按钮添加原型,您通常会从列表中选择原型。

结论

按照这些步骤应该可以创建范围广泛的项目结构和基础文件。我仍然看不到如何将项目的组 ID 和包名称填充为默认的 com.aplos。不过,我现在很高兴,如果我了解了其他部分,我一定会更新这篇文章,或者如果您知道我会很高兴收到您的来信。

 

相关内容

Maven构建前端资源

Maven无法生成模块声明,这是为什么?

Maven中的Snapshot 到底是个啥,有啥作用?