Micronaut Dockerfile破坏了软件包的构建

时间:2019-04-22 10:25:51

标签: java docker micronaut

我已经使用创建了一个简单的Micronaut应用程序

  

mn create-app app_name --build maven

在需要的情况下使用JDK 11。

这将创建一个可以正常编译的maven项目,但其中包含如下所示的Dockerfile

FROM adoptopenjdk/openjdk11-openj9:jdk-11.0.1.13-alpine-slim
COPY target/app_name*.jar app_name.jar
EXPOSE 8080
CMD java -XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap -Dcom.sun.management.jmxremote -noverify ${JAVA_OPTS} -jar app_name.jar

但是,Maven AFAICT中没有包含docker build。

所以我包括了这个

<plugin>
    <groupId>com.spotify</groupId>
    <artifactId>dockerfile-maven-plugin</artifactId>
    <version>${dockerfile-maven-version}</version>
    <executions>
        <execution>
            <id>default</id>
            <goals>
                <goal>build</goal>
                <goal>push</goal>
            </goals>
        </execution>
    </executions>
    <configuration>
        <repository>dockerUser/app_name</repository>
        <tag>${project.version}</tag>
        <buildArgs>
            <JAR_FILE>${project.build.finalName}.jar</JAR_FILE>
        </buildArgs>
    </configuration>
</plugin>

确实可以构建docker映像,但并非没有人工干预。原因是在mvn package上,在target/中创建了三个jar:

  • app_name-0.1.jar
  • app_name-0.1-shaded.jar
  • original-app_name-0.1.jar

这使得docker目标失败

  

将COPY与多个源文件一起使用时,目标位置必须是目录,并以/

结尾

该消息确实有意义,因为所有jar都与Dockerfile中的COPY源模式匹配。

现在,我只删除其他两个jar(原始的和着色的jar)并自己运行docker目标,但这仅在我以本地手动模式工作的情况下可以了。

我是否缺少某些东西,或者这是对Micronaut项目创建的疏忽?

2 个答案:

答案 0 :(得分:1)

不幸的是,我无法帮助您配置Micronaut。但是,如果目的是复制主jar文件,并且未知的版本后缀是复制时使用通配符的原因,则可以将finalName元素添加到pom.xml中以剥离版本信息。从JAR文件的名称开始:

<build>
    <finalName>app_name</finalName>
</build>

答案 1 :(得分:0)