2015-11-12 51 views
8

我有一个多模块Maven项目,其中一些模块必须作为Docker镜像构建。我试图把所有的配置在父POM像这样:Maven:如何在父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.*属性?

+1

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

回答

0

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

相关问题