Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在生成项目时,如何有条件地从原型中包括或排除文件?_Java_Maven 2_Archetypes_Gradle - Fatal编程技术网

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

Java 在生成项目时,如何有条件地从原型中包括或排除文件?,java,maven-2,archetypes,gradle,Java,Maven 2,Archetypes,Gradle,我正在为我们的项目(Weld)创建Maven 2原型。我希望能够根据在原型:generate期间定义的属性值,控制将哪些文件放入生成的项目中。例如,我预见到以下提示: Define value for groupId: : com.example Define value for artifactId: : myproject Define value for package: com.example: : Define value for includeGradleSupport: : y

我正在为我们的项目(Weld)创建Maven 2原型。我希望能够根据在
原型: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
描述符来控制这种行为?

我可以看看在archetype插件中启用这种行为需要哪些编码

我认为今天主要的工具是在原始构建期间有条件地生成两个不同的原型工件。然后,原型用户将显式地使用您的原型with thing或您的原型without thing

我知道这并不完全是你想要的,我同意你所要求的是一个合理的用例

虽然我可以创建一个完整的其他原型,但有时更改非常轻微,因此更容易包含/排除文件

这句话让我想

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

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


因此,我建议:创建你的Graddle原型,只添加与Graddle相关的文件

我个人会根据用户请求移动可以删除/添加的部件,并将其放入不同的文件夹中,这样你就可以使用不同的配置文件构建不同的部件

感谢您提供的信息

我只是查看了archetype插件源代码,似乎没有解决这个问题


只是为了跟踪它而创建。

Hmm,从同一个项目创建多个工件将违反Maven的理念(一个项目=>一个工件)。我真的认为这将是一件有用的事情。我可以在文件中使用velocity来更改内容,但我不能做的是包含或排除整个文件,这实际上是相同想法的扩展。我期待您的原型;)据本期报道:该功能正在开发中。现在我们只需要看一些文档就可以了(需要等待多久?)我在一个项目上工作了一段时间,该项目使用了用于这种行为的概要文件,结果很糟糕,我们的构建和POM非常复杂。我们最终得出结论,最好的做法是建立一个新的项目结构,在这个结构中,我们的主要应用程序代码发生了冲突,然后不同的部署配置是完全不同的构建,它们依赖于主项目。这会创建很多构建和项目,但它们都很简单,易于维护,并且只有一个工件。这个用户似乎找到了解决方法。你是说我们应该拥有所谓的“部分”原型,它覆盖现有项目(可能是由基原型创建的)?对于最终开发人员来说,这听起来仍然是太多的工作了。他们不想运行两个原型:generate命令,他们想运行一个。另一方面,如果您建议我们创建第二个原型,将添加的文件合并到基本原型中,那么对我来说,这打破了Maven中一个项目生成一个工件的惯例。也许如果原型可以拉入共享文件,那么这将是另一种可能性。@Dan我建议使用部分原型解决方案:-)。我相信对于终端开发人员来说,概念的复杂性是相同的,因为他必须在所有情况下都知道这两个概念。在实现中,您可以确保他不必再进行更多的键入;-)。此外,如果需要的话,应该可以很容易地用一个命令包装对这两个函数的调用,不是吗?是的,这当然是一种有效的方法。但是在我们的例子中,出于可用性的原因,我们希望最小化生成项目的复杂性。例如,当开发人员选择servlet配置时,我们希望该构建只适应单一场景。