【问题标题】:Maven: How to reference the build directory of a child project in a parent POM?Maven:如何在父 POM 中引用子项目的构建目录?
【发布时间】:2015-11-12 11:02:45
【问题描述】:

我有一个多模块 Maven 项目,其中一些模块必须构建为 Docker 映像。我尝试将所有配置放在父 POM 中,如下所示:

父 POM:

<build>
  <pluginManagement>
    <plugins>
      <plugin>
        <groupId>com.spotify</groupId>
        <artifactId>docker-maven-plugin</artifactId>
        <version>0.3.5</version>
        <configuration>
          <baseImage>java</baseImage>
          <imageName>${project.artifactId}</imageName>
          <entryPoint>["java", "-jar", "/${project.build.finalName}.jar"]</entryPoint>
          <resources>
            <resource>
              <targetPath>/</targetPath>
              <directory>${project.build.directory}/${project.build.finalName}-executable</directory>
              <include>${project.build.finalName}.jar</include>
              <include>lib/*.jar</include>
            </resource>
          </resources>
        </configuration>
      </plugin>
    </plugins>
  </pluginManagement>
</build>

子 POM:

<build>
  <plugins>
    <plugin>
      <groupId>com.spotify</groupId>
      <artifactId>docker-maven-plugin</artifactId>
    </plugin>
  </plugins>
</build>

但是当我在子项目上运行 mvn docker:build 时出现错误,因为 project.build.directory 属性被解析为父 POM 的目标目录,而不是子项目的目标目录。

是否可以延迟扩展父 POM 中的属性?或者从父 POM 中引用子的 project.* 属性?

【问题讨论】:

  • 不可能,如果您在 child , ${project.build.directory} = child/target 中执行 mvn docker:build,因为您的插件在 pluginManagement 中。显示日志?

标签: java maven


【解决方案1】:

问题是我还使用了版本的属性(例如:Maven version with a property)。这仅在从聚合器 POM 运行 Maven 时才有效。 切换到显式版本(并使用 maven-release-plugin 更新它们)解决了这个问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-24
    • 1970-01-01
    • 1970-01-01
    • 2011-05-09
    • 2021-11-16
    • 2013-09-22
    • 2018-03-05
    相关资源
    最近更新 更多