Maven:从不同的pom导入pom属性

20

我想从项目X的pom文件中导入属性到我的项目Y的pom文件中,例如库版本。我不想将项目X作为我的项目父项。

我已经尝试在依赖管理部分将项目X的pom文件包含为导入。

<dependency>
                <groupId>abc</groupId>
                <artifactId>def</artifactId>
                <version>1.1</version>
                <type>pom</type>
                <scope>import</scope>
</dependency>
请指教。 谢谢。

3
现在不是时候。请投票支持 https://issues.apache.org/jira/browse/MNG-5102。 - foal
你需要像这样为你的项目定义一个父级:<parent> <groupId>aa</groupId> <artifactId>prj-parent</artifactId> <version>1.5.4</version> <relativePath /> </parent> - BackToReal
3个回答

3
我认为,今天的答案是“不行”。你不能在没有继承的情况下从外部依赖中读取属性。
然而,可以通过使用Codehaus的Properties Maven Plugin进行一些技巧性操作。实际上,它可以从外部文件加载Maven属性。它甚至可以使用classpath: URL来加载文件。因此,您可以尝试从另一个依赖项中加载这些文件(该依赖项应具有适当的范围,因为您可能不希望该依赖项的JAR在运行时挂起)。

1
通常在不使用父POM的情况下共享依赖版本的方法是使用BOM。
这些是单独的项目,只包含一个pom.xml,其中包含<dependencyManagement>。然后可以使用<scope>import</scope>将其导入到其他几个项目中。
这些其他项目然后导入BOM中的dependencyManagement。

3
对于依赖项,只有在从BOM导入dependencyManagement时才返回true。对于properties、pluginManagement、distributionManagement等,则无法使用该方法。因此,它可能无法回答关于属性的问题。 - Donatello
我对这个答案进行了踩票,因为正如Donatello所指出的那样,导入BOM只会带来依赖管理信息,而不是属性。因此,就特定的问题而言,这个答案是错误的。 - Garret Wilson
@GarretWilson 没错,但这是我们能够接近 OP 所想要的内容(例如库版本)。简单地说“不行,无法完成”也是正确的,但可能不那么有帮助。 - J Fabian Meier
“一个简单的‘不行,无法完成’是正确的……”是的,那应该是正确的答案。但这不是你的答案。你的答案对于问题来说是错误的。如果你想说,“不,那不可能做到,但这里有一些相关的东西可能会有帮助”,那仍然是正确的。你把“可能有帮助的相关内容”作为正确答案呈现,这是不正确的。但我要说,即使你的替代方案也与问题无关,甚至没有任何有关属性的解释。所以不,答案是错误的。 - Garret Wilson
@GarretWilson 您说得对,我应该更详细地解释这个问题,并且为什么很可能回答了OP的潜在问题。 - J Fabian Meier

-3

基本上,您需要创建一个父POM,该POM被两个项目导入。

  1. 父POM具有<dependencyManagement>部分,其中列出了groupId、artifactId和version
  2. 子POM只需要列出groupId和artifactId,因为版本是从父POM的<dependencyManagement>部分继承的

例如:

root/pom.xml - Builds all modules, a simple pom with a `<modules>` section which includes parent, project1 and project2
root/parent/pom.xml - This has a `<dependencyManagement>` section
root/project1/pom.xml - parent=../parent/pom.xml
root/project2/pom.xml - parent=../parent/pom.xml

更多信息在这里


OP明确表示它不能是父级。 - Azuaron
OP说:“我不想让项目X成为我的项目的父级”。我建议引入一个新的父级,由X和Y都继承。 - lance-java

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接