我有一个maven POM,我想用它作为模板,根据我传递给它的参数,生成具有不同名称的工件。但我不知道如何在运行时指定artifactId。
如果我参数化
<artifact>foo-${bar}</artifact>
马文抱怨说:
[警告]“artifactId”包含表达式,但应为常量。
如果我漏掉
mvn -Dproject.artifactId=foo ...
马文抱怨说:
[错误]“artifactId”丢失。
除了从模板动态生成POM文件之外,还有其他技巧可以用来实现这一点吗?[嗯,也许我可以使用maven资源过滤…]
你违背了一个maven原则,即一个pom应该代表一个独立的项目,生成一个稳定的工件(即避免参数构建,不能轻易复制)。
如果这真的是你想要的,我会使用maven install plugin作为生命周期步骤(特别是安装文件),并将其参数化,而不是尝试参数化pom本身的artifactId。
可以在运行时设置artifactId(对于包含多个应用程序的单存储库,我使用以下解决方案)。你的项目pom。xml应该包括:
<project>
<artifactId>${artifactId}</artifactId>
...
<properties>
<artifactId>defaultArtifactId</artifactId>
</properties>
...
要在运行时设置artifactId,请使用带有-DartifactId=foo
选项的mvn
命令。
示例:mvn验证-DartifactId=foo
如果我做对了,你想要重用一个蓝图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>
还有很多由GitHub上的人创建的原型,你可以从中了解更多关于Maven原型的构造和过滤。
或者,您可以尝试在不使用原型系统的情况下设置Maven过滤,但我没有这方面的经验。我认为如果没有一个有效的artifactId,你就无法运行一个项目,在那之前必须有一代人(比如从原型生成),但我不确定。
问题内容: 我们有Java和Flex项目。当前,我们有1个基本pom,其中包含我们要用于两个项目的配置。问题是:Flex项目会继承配置,例如for 和plugins,这是不希望的。 我要清理它并有一个真正的基本pom,然后是a 和a 。但是,这在具有Flex部分和Java部分的多模块中如何工作? 我们有自己的应用程序插件,其中使用以下结构: 我的插件 我的插件客户端(flex) 我的插件服务器(j
我有一个多模块maven项目,需要从JaxB注释类构建一个XML模式。这些类位于不同的maven项目中。我可以使用jaxb2 maven插件通过指向所有项目的源代码来生成单个模式吗?也许像这样。。。 还是需要为每个项目单独创建一个模式,然后将它们导入父模式? 我使用的是maven 2.2.1和jaxb2-maven-plugin 1.3。
我有一组可以以任何顺序运行的分级任务,我将它们分组为3个集a、B和C 有办法运行特定的任务组吗?就像我只想运行一个,一个B,可能是一个和一个B的组合
问题内容: 我有兴趣将GitHub上的项目用作我项目中的依赖项。GitHub项目有一个文件。我可以修改我的文件以使用该项目吗?如果是这样,怎么办?如果没有,我的最佳做法是什么? 问题答案: AFAIK,我的意思不是这样。 您可以将github用作Maven存储库-这与直接引用项目不同,它具有pom文件意味着仅是Maven项目。 如果 项目在中央存储库或其他存储库中不可用,则最好的选择是克隆,构建并
问题内容: 请考虑以下情形。我有一个带有bean的Spring应用程序上下文,该bean的属性应该是可配置的,认为或。可变的应用程序配置由单独的Bean管理,我们称之为。 管理员现在可以更改配置值,例如电子邮件地址或数据库URL,我想在运行时重新初始化配置的bean。 假设我不能只是简单地修改上述可配置bean的属性(例如,通过或构造函数注入创建),而必须重新创建bean本身。 关于如何实现这一点
当我从存储库中获取Docker映像时,我看到它用一些ID拉出了一堆层,但当我尝试使用Docker run运行它们时,它告诉我它找不到它。 我是否可以运行我可以通过Docker历史 看到的Docker图像的某一层,就像古生物学家挖掘寻找有趣的东西一样? 我所尝试的: