我可以在运行时指定maven project.artifactId吗?

2024-02-20

我有一个 Maven POM,我想将其用作模板,根据我传递给它的参数生成具有不同名称的工件。但我不知道如何在运行时指定artifactId。

如果我参数化<artifactId>像这样的元素:

<artifact>foo-${bar}</artifact>

行家抱怨:

[警告]“artifactId”包含表达式,但应该是常量。

如果我遗漏了<artifactId>在 POM 中并尝试在命令行上指定它

mvn -Dproject.artifactId=foo ...

行家抱怨:

[错误]“artifactId”丢失。

除了从模板即时生成 POM 文件之外,我还可以使用其他技巧来实现此目的吗? [嗯,也许我可以使用 Maven 资源过滤来做到这一点...]


如果我猜对了,您希望重用蓝图 Maven 应用程序并能够更改 artifactId。

这个用例可以最好地完成Maven 原型. See 这是让你开始的 http://maven.apache.org/guides/mini/guide-creating-archetypes.html。它相当简单,值得学习。您有正常的 Maven 项目并添加变量,例如${groupId}在你的蓝图中 pom.然后它们会被您在原型生成时给出的参数替换:

mvn archetype:generate                                  \
-DarchetypeGroupId=<archetype-groupId>                \
-DarchetypeArtifactId=<archetype-artifactId>          \
-DarchetypeVersion=<archetype-version>                \
-DgroupId=<my.groupid>                                \
-DartifactId=<my-artifactId>

GitHub 上还有很多人们创建的原型,您可以在其中了解有关 Maven 原型中的结构化和过滤的更多信息例如 https://github.com/jboss-eap/wfk-archetypes/blob/master/spring-mvc-archetype/src/main/resources/archetype-resources/pom.xml.

或者,您可以尝试在不使用原型系统的情况下设置 Maven 过滤,但我对此没有经验。我认为如果没有有效的artifactId,您就无法运行项目,在此之前必须进行一些生成(例如从原型生成),但我不确定。

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

我可以在运行时指定maven project.artifactId吗? 的相关文章

随机推荐