Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.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
我可以在运行时指定maven project.artifactId吗?_Maven_Maven 3 - Fatal编程技术网

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

我可以在运行时指定maven project.artifactId吗?,maven,maven-3,Maven,Maven 3,我有一个maven POM,我想用它作为模板,根据传递给它的参数,生成具有不同名称的工件。但是我不知道如何在运行时指定artifactId 如果我像这样参数化元素: <artifact>foo-${bar}</artifact> maven抱怨说: [错误]“artifactId”丢失 除了从模板动态生成POM文件之外,还有其他技巧可以用来实现这一点吗?[嗯,也许我可以使用maven资源过滤来实现这一点…]如果我做对了,您希望重用blueprint maven应用程序并

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

如果我像这样参数化
元素:

<artifact>foo-${bar}</artifact>
maven抱怨说:

[错误]“artifactId”丢失


除了从模板动态生成POM文件之外,还有其他技巧可以用来实现这一点吗?[嗯,也许我可以使用maven资源过滤来实现这一点…]

如果我做对了,您希望重用blueprint maven应用程序并能够更改artifactId

使用Maven原型可以最好地完成此用例。看见这相当直截了当,值得学习。您有一个普通的Maven项目,并在blueprint pom中添加变量,如
${groupId}
。然后,它们将被您在原型生成时提供的参数替换:

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


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

您违反了maven原则,即pom应该代表一个生成稳定工件的自包含项目(即,避免无法轻松复制的参数化构建)


如果这是您真正想要的,我将使用maven install plugin作为生命周期步骤(特别是安装文件),并对其进行参数化,而不是尝试参数化pom本身的artifactId。

可以在运行时设置artifactId(对于包含多个应用程序的单存储库,我使用以下解决方案)。您的项目pom.xml应包括:

<project>
  <artifactId>${artifactId}</artifactId> 
  ...
  <properties>
    <artifactId>defaultArtifactId</artifactId>
  </properties>
  ... 

${artifactId}
...
defaultArtifactId
... 
要在运行时设置artifactId,请使用带有
-DartifactId=foo
选项的
mvn
命令


示例:
mvn verify-DartifactId=foo

谢谢,这似乎很合适。似乎每个maven问题的答案都是“有一个插件”:-。我怀疑我使用maven过滤的想法最终会成为一种穷人的原型,因此,使用经过验证的东西而不是重新发明轮子是有意义的。我同意原型是可行的,但它并没有真正回答问题。即使这是一个非常糟糕的实践,是否可以在运行时设置artifactId?感谢您的反馈。我的构建已经有点参数化了(考虑到它内置的从命令行、环境等获取属性的支持,maven似乎并没有太多地阻止这一点)。但我承认我是一个新手。我需要做的是采取一个“工厂”项目,并建立它的许多变化,只是略有不同,生产不同的工件。我来看看安装文件。
<project>
  <artifactId>${artifactId}</artifactId> 
  ...
  <properties>
    <artifactId>defaultArtifactId</artifactId>
  </properties>
  ...