2015-11-12 50 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來更新它們)解決了這個問題。

相關問題