【发布时间】:2021-02-27 03:31:55
【问题描述】:
我有一个多模块项目,我使用 Jib 构建 Spring Boot 应用程序。我知道将胖 JAR 放入容器会阻止有效地构建映像 (see),但需要将一个特定模块打包到胖 JAR 文件中。由于我想为整个多模块项目保留相同的构建工具,是否可以使用 Jib 打包 fat jar?
我已经尝试过repackage 目标
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.3.5.RELEASE</version>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
即打包应用如
app
├── classpath
│ └── import-metadata-service-0.0.1-SNAPSHOT.original.jar
└── libs
├── HdrHistogram-2.1.12.jar
├── LatencyUtils-2.0.3.jar
├── apache-jena-libs-3.13.0.pom
...
【问题讨论】:
-
有一种 hacky 方法可以实现你想要的。但在此之前,我们想了解您是否在普通的瘦 JAR 容器化(如图中的
.original.jar所示)和 Spring Boot 胖 JAR 之间看到了不同的应用程序行为?如果是这样,您可以在 Jib 回购中提出问题吗?不能拿原来的瘦JAR是什么问题? -
fatjar 也需要复制到另一个镜像中。保留这个包装,我不必更改将 fatjat 复制到的图像。我没有考虑为我的非常具体的用例打开一个问题,因为它根本不是 jib 的范围。我正在考虑使用另一个构建工具,因为即使我可以设法将应用程序打包为 fatjar,我当然也必须修改另一个图像,因为我无法直接使用
java -jar(@987654322 @),不是吗? -
好吧,我不会质疑你为什么要这个。有几种不同的创造性(hacky)方法可以实现这一点,但也许最简单的一种是使用
<extraDirectories>功能将您的胖JAR 复制到您想要的任何地方,将<container><entrypoint>设置为执行java -jar ...(您想要的任何命令) 和 remove the entire/app/*使用 Jib Layer-Filter extension。 -
仅供参考,我们目前正致力于发布一个名为“Jib CLI”的 CLI 工具,Jib CLI 可能更适合您的工作流程。敬请期待。