【问题标题】:Maven Properties Plugin - doesn't work in inheritanceMaven 属性插件 - 在继承中不起作用
【发布时间】:2012-01-11 23:33:16
【问题描述】:

我有这个目录结构

root
 |- pom.xml
 |- submodule1
      |- pom.xml
      |- project.properties
      |- subsubmodules
           |-pom.xml

Submodule1 继承自 root,subsubmodules 继承自 submodule1

Subsubmodules 具有使用 submodule1 的 project.properties 中的属性来定义其版本的依赖项。 即在子子模块中

<dependency>
 <groupId>some.org</groupId>
<artifactId>someartifact</artifactId>
<version>${themodules.version}</version>
</dependency>

在 Submodule1 的 project.properties 中,我有

themodules.version = 1.0

所以我通过在根 pom.xml 中定义来使用 properties-maven-plugin

<project>
  <build>
    <plugins>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>properties-maven-plugin</artifactId>
        <version>1.0-alpha-2</version>
        <executions>
          <execution>
            <phase>initialize</phase>
            <goals>
              <goal>read-project-properties</goal>
            </goals>
            <configuration>
              <files>
              <!-- *edited from earlier post <file>etc/config/dev.properties</file>-->
<file>${basedir}/project.properties</file>
              </files>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
</project>

然后我在根级别运行 mvn install。 Maven 说它无法解析依赖项中的 ${themodules.version}。

我还在子模块级别运行了 mvn install ,但仍然无法解决。

请帮忙

【问题讨论】:

    标签: maven-plugin


    【解决方案1】:

    这里与继承无关,您只需在根 pom.xml 中将 project.properties 的位置添加到 properties-maven-plugin 的配置中:

    <configuration>
      <files>
        <file>etc/config/dev.properties</file>
        <file>${project.basedir}/submodule1/project.properties</file>
      </files>
    </configuration>
    

    然后在根级别执行 mvn clean install。

    【讨论】:

    • 对不起,我在根 pom.xml 中将 添加为 ${basedir}/project.properties 并假设它将被继承到子模块 pom 模型。因此它应该读取子模块中的 project.properties。这个假设不正确吗?鉴于继承是自下而上的方法,父母很难确切地知道他们的孩子是谁以及 project.properties 文件在孩子中的确切位置
    • @ALQH,没有属性文件继承的概念,你只需要告诉 properties-maven-plugin 读取属性文件的确切位置。
    • 我在根 pom.xml 中声明了这一点,但是当我运行 mvn install 时,它仍然无法传递在子模块中用作依赖版本的 ${themodules.version}。它说dependency.dependency.version无效。
    • @ALQH,您是否在根目录下运行 mvn install ?如果您在 root/submodule1 下运行 mvn install,它将无法工作,因为 ${project.basedir} 现在指向 root/submodule1,如果您想从外部 root 运行 mvn install,请将 ${project.basedir} 更改为修复绝对文件路径。
    • 我从 root 运行 mvn install。然后 Maven 将从中安装子模块,当 maven 到达 submodule1 的 pom.xml 时,它无法解析属性。
    【解决方案2】:

    其他开发人员签入的代码也有类似问题。 他们在根 pom.xml 下有 properties-maven-plugin

    我将它移到每个消耗属性的子项目中,并使其成为相对路径。 由于主 pom 在 ${project.basedir} 中,子项目将在 ../${project.basedir} 中。

    也就是说,我将 plugin 添加到那些 pom 中的 plugins 元素中,并将文件元素设置为 ${project.basedir}/.. /default-pom.properties.

    当我这样做时,它起作用了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-05
      • 2017-04-28
      • 1970-01-01
      • 2014-01-15
      • 1970-01-01
      • 2010-11-17
      • 2013-12-02
      • 1970-01-01
      相关资源
      最近更新 更多