生成项目时,如何有条件地在原型中包含或排除文件?

时间:2009-12-17 05:47:12

标签: java maven-2 archetypes gradle

我正在为我们的项目(Weld)创建Maven 2原型。我希望能够根据archetype:generate期间定义的属性值控制将哪些文件放入生成的项目中。例如,我预见到以下提示:

Define value for groupId: : com.example
Define value for artifactId: : myproject
Define value for package:  com.example: :
Define value for includeGradleSupport: : y

根据includeGradleSupport的值,我想在生成的项目中包含(或不包含)build.gradle文件。如果用户不想要Gradle支持,我不希望用不必要的文件混乱生成的项目。

另一个例子是,如果用户想要Jetty支持,我可能需要提供一个Jetty Web片段(也许是为了激活一个监听器)。

这完全取决于开发人员打算使用的项目定制。虽然我可以创建一个完整的其他原型,但有时候这些变化很小,以至于包含/排除文件会更容易。

有没有办法使用archetype-metadata.xml描述符控制此行为?

4 个答案:

答案 0 :(得分:1)

我个人会移动可以根据用户请求删除/添加的部分并将其放入不同的maven profiles中,以便您可以使用不同的配置文件构建不同的部分

答案 1 :(得分:0)

我可以看一下在archetype插件中启用它所需的编码。

我认为今天做这件事的主要工具是在原始版本中有条件地产生两种不同的原型文物。然后,原型用户将明确使用yourarchetype -withthing或yourarchetype-withoutthing。

我知道这并不完全是你所追求的,我同意你所要求的是一个明智的用例。

答案 2 :(得分:0)

  

虽然我可以创建一个完整的其他原型,但有时候这些变化非常小,以至于包含/排除文件会更容易。

这句话让我觉得......

您似乎拥有默认的项目结构 我们假设它很大,有很多文件。当然,您不希望以不同的原型复制逻辑和文件。

现在有时,项目有一个额外的行为(与Gradle相关) 这听起来是另一个原型的典型用例,它不是从零开始,而是在第一个原型之后。我在网上看到了几个这样的原型示例。仅当项目需要Graddle时,开发人员才会触发此原型。 : - )

所以我建议:创建您的Graddle原型,只添加与Graddle相关的文件

答案 3 :(得分:0)

感谢Dan的信息!

我刚看了一下archetype插件源代码,http://jira.codehaus.org/browse/ARCHETYPE-58似乎没有解决这个问题。

刚刚创建了http://jira.codehaus.org/browse/ARCHETYPE-424来跟踪它。