Maven:如何在父POM中引用子项目的构建目录?

djd*_*tra 8 java maven

我有一个多模块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>
Run Code Online (Sandbox Code Playgroud)

儿童POM:

<build>
  <plugins>
    <plugin>
      <groupId>com.spotify</groupId>
      <artifactId>docker-maven-plugin</artifactId>
    </plugin>
  </plugins>
</build>
Run Code Online (Sandbox Code Playgroud)

但是,当我运行mvn docker:build子项目时,我收到一个错误,因为该project.build.directory属性已解析为父POM的目标目录,而不是子目标目录.

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

djd*_*tra 0

问题是我还使用了版本的属性(如下所示:带有属性的 Maven 版本)。仅当从聚合器 POM 运行 Maven 时,这才有效(某种程度上)。切换到显式版本(并使用 maven-release-plugin 更新它们)解决了这个问题。