2017-09-16 84 views
0

我有一個java/hibernate/jpa/maven項目,我試圖轉換,以便它(從項目創建的.jar文件)是Docker鏡像。我也使用Spotify插件。將生成的jar文件的名字從Maven pom.xml傳遞到Dockerfile

下面,對於以下多克爾命令

ADD <full_path_of_generated_file>.jar app.jar 

full_path_of_generated_file從pom.xml文件生成的值(在Maven的側)。爲了讓Docker正確生成映像,需要此信息。

如何獲取生成的文件的名稱到Dockerfile?

TIA

Maven的外掛區pom.xml文件

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

     <configuration> 
      <imageName>apx/${project.artifactId}</imageName> 
      <dockerDirectory>${project.basedir}/docker</dockerDirectory> 
     </configuration> 
    </plugin> 

    <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-jar-plugin</artifactId> 
     <!-- <version>2.6</version> --> 
     <executions> 
      <execution> 
       <id>analyze</id> 
       <phase>package</phase> 
       <configuration> 
        <failBuild>true</failBuild> 
        <ignoreDirect>false</ignoreDirect> 
       </configuration> 
      </execution> 
     </executions> 
     <configuration> 

      <finalName>${project.artifactId}</finalName> 
      <archive> 
       <manifest> 
        <mainClass>ccinfw.MainApplication</mainClass> 
       </manifest> 
      </archive> 
     </configuration> 
    </plugin> 
    <plugin> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-maven-plugin</artifactId> 
    </plugin> 
</plugins> 

[... snip ...] 

<artifactId>ccinf</artifactId> 

下面是正在使用的Dockerfile副本

FROM java:8 
VOLUME /tmp 
ADD <full_path_of_generated_file>.jar app.jar 
RUN bash -c 'touch /app.jar' 
EXPOSE 8080 
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"] 
+0

裏面我假設你的POM的包裝可以是 「罐子」 或者你不給一個包裹標籤? – khmarbaise

+0

我只集成了pom.xml文件的一部分(以保持簡短)。是的,正在創建一個.jar文件用於Docker鏡像。 –

+0

我能想到的最簡單的事情是:' WhatEver.jar ...'並更改'ADD target/WhatEver.jar app.jar'? – khmarbaise

回答

0

什麼工作對我來說是將最終構件的名稱(例如something_or_other-1.2.3-SNAPSHOT.jar)作爲參數傳遞(ARG)到Dockerfile中。

內的pom.xml:

<plugin> 
     ... 
     <configuration> 
     ... 
      <buildArgs> 
       <JAR_FILE>${project.build.finalName}.jar</JAR_FILE> 
      </buildArgs> 
     </configuration> 
    </plugin> 

然後,Dockerfile

# insert other Dockerfile stuff here and then... 

    ARG JAR_FILE 
    ADD target/${JAR_FILE} app.jar 
    ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "/app.jar"] 
相關問題