Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.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 2 maven在子模块中复制了groupId、artifactId和版本_Maven 2 - Fatal编程技术网

Maven 2 maven在子模块中复制了groupId、artifactId和版本

Maven 2 maven在子模块中复制了groupId、artifactId和版本,maven-2,Maven 2,我们正在优化我们的Maven配置(以前使用ant),我刚刚读了Sonatype的书。重复配置在过去给我们带来了麻烦,所以我绝对想避免哪怕是最微小的一点 上面的书提到在将其他同级子模块作为依赖项引用时,使用父模块的内置project.groupId和project.version属性: <dependency> <groupId>${project.groupId}</groupId> <artifactId>model</artifa

我们正在优化我们的Maven配置(以前使用ant),我刚刚读了Sonatype的书。重复配置在过去给我们带来了麻烦,所以我绝对想避免哪怕是最微小的一点

上面的书提到在将其他同级子模块作为依赖项引用时,使用父模块的内置project.groupId和project.version属性:

<dependency>
  <groupId>${project.groupId}</groupId>
  <artifactId>model</artifactId>
  <version>${project.version}</version>
</dependency>

${project.groupId}
模型
${project.version}
很好用,我喜欢。但这在子模块pom.xml的标记中不起作用:

<parent>
    <groupId>${project.groupId}</groupId>
    <artifactId>${project.artifactId}</artifactId>
    <version>${project.version}</version>
    <relativePath>../pom.xml</relativePath>
</parent>

${project.groupId}
${project.artifactId}
${project.version}
../pom.xml
我想这没什么大不了的,似乎我可以为这些创建属性,但通过许多模块,我真的很想充分了解针对此类问题的最佳实践

更新 到目前为止,最好的方法似乎是如下。有点难看,但消除了重复的硬编码值。 父pom.xml:

<groupId>${groupId}</groupId>
<artifactId>${artifactId}</artifactId>
<packaging>pom</packaging>
<version>${version}</version>
<properties>
    <groupId>com.mycompany</groupId>
    <artifactId>mycompany</artifactId>
    <version>1.0</version>
</properties>
${groupId}
${artifactId}
聚甲醛
${version}
com.mycompany
我的公司
1
子pom.xml:

<parent>
    <groupId>${groupId}</groupId>
    <artifactId>${artifactId}</artifactId>
    <version>${version}</version>
    <relativePath>../pom.xml</relativePath>
</parent>
<artifactId>child</artifactId>

${groupId}
${artifactId}
${version}
../pom.xml
小孩
很好用,我喜欢。但是这在子模块pom.xml的(…)的标记中不起作用

这行不通,鸡和蛋的问题:你不能从父母那里得到要使用的父母的坐标

我想这没什么大不了的,看起来我可以为这些创建属性,但是有很多模块,我真的很想完全理解针对这些问题的最佳实践

好吧,假设它可以工作(据我所知,属性没有在父元素中展开,所以它不会),那么这些属性放在哪里呢?在父母身上?与上述问题相同。在孩子身上?没有意义。简而言之,您需要在父元素中硬编码这些值

请注意,这对于
groupId
artifactId
来说不是问题,因为它们没有改变;但是,对于
版本
来说更烦人,我建议使用或(及其目标)

PS:Maven 3.1将支持无版本的父元素(请参阅)

相关答案


为什么我不能从父对象获取父对象的坐标?relativePath应该允许我访问父pom。因此,如果您将groupId、artifactId和version添加为父级中的属性,然后在子级中为父级引用这些属性,那么它实际上是有效的。为了不存在重复的值,父对象中相应的硬编码元素也被替换为对属性的引用。这似乎是一个丑陋的方式去做这件事,但它的工作

不,它不起作用,在父元素中允许属性替换(为了以后的再现性)。Maven 2.x就是这样设计的。请参阅用户邮件列表上的和,例如:


当您询问最佳实践时,我回答说:在父元素中硬编码所有内容。句号。

为什么我不能从父对象获取父对象的坐标?relativePath应该允许我访问父pom。因此,如果您将groupId、artifactId和version添加为父级中的属性,然后在子级中为父级引用这些属性,那么它实际上是有效的。为了不存在重复的值,父对象中相应的硬编码元素也被替换为对属性的引用。这似乎是一个丑陋的方式去做这件事,但它的工作…嗯。。我不知道该说什么,财产替代似乎确实很有效。我会更新我的问题,以确保我们谈论的是同一件事。不过我很好奇,为什么不鼓励这样做呢?为什么在许多模块中都有重复的硬编码值?@至少你认为是这样,但事实并非如此(你不能孤立地构建子模块,安装/部署/发布的POM是不正确的)。硬编码值。我想我提供了足够多的参考资料,如果你不信任我,就检查一下(你不是第一个想到这个的人)。几周前就注意到了这个问题。我们目前正在本地全面部署并投入生产,有5个模块和1个父模块。父级定义groupId、artifactId和版本属性。我们在任何地方都使用它们,用于父模块的groupId、artifactId、version和子模块的等效项。Maven 3.1不支持无版本的父模块。