Java 如何用薄罐子代替胖罐子?

Java 如何用薄罐子代替胖罐子?,java,apache-flink,uberjar,Java,Apache Flink,Uberjar,我们目前正在使用maven shade插件将Flink应用程序部署为一个胖罐子。问题是,每个应用程序jar最终大约有130-140 MB,这对于每次构建和部署都是一个难题。有没有一种方法可以排除依赖项,只需在集群中部署一个大约50KB的精简jar 您可以在Flink的lib(请参阅)中预先将依赖项JAR放置在集群中,然后在每次提交作业时只上载精简JAR。您可以在Flink的lib(请参阅)中预先将依赖项JAR放置在集群中,然后在每次提交作业时只上载精简JAR。下面是我们如何处理Gradle的 我

我们目前正在使用maven shade插件将Flink应用程序部署为一个胖罐子。问题是,每个应用程序jar最终大约有130-140 MB,这对于每次构建和部署都是一个难题。有没有一种方法可以排除依赖项,只需在集群中部署一个大约50KB的精简jar

您可以在Flink的
lib
(请参阅)中预先将依赖项JAR放置在集群中,然后在每次提交作业时只上载精简JAR。

您可以在Flink的
lib
(请参阅)中预先将依赖项JAR放置在集群中,然后在每次提交作业时只上载精简JAR。

下面是我们如何处理Gradle的

我们有两个子项目:

  • 作业
    :对于要运行的流作业
  • 运行时
    :用于其他运行时依赖项(例如自定义
    文件系统
    实现)
我们为运行时提供的依赖项创建新的gradle配置:

configurations {
  provided,
  compile.extendsFrom provided
}
然后将提供的依赖项标记为:

provided("org.apache.flink:flink-java:1.6.0")  // flink java v1.6.0
然后,我们修改
jar
任务来构建一个没有任何
提供的
依赖项的jar:

结果是一个带有所需依赖项(
compile
)的
jar
,然后使用Web UI进行部署

对于自定义运行时依赖项,我们构建一个自定义Docker映像,并将构建的工件(
runtime.jar
,使用与上面相同的配置构建)推送到Flink中的
libs/
目录。如果您不使用Docker,也可以手动执行此操作


最后,在我们的特殊情况下,在我们的作业和运行时依赖项(使用反射发现)之间没有定义直接的依赖项。

下面是我们如何使用Gradle

我们有两个子项目:

  • 作业
    :对于要运行的流作业
  • 运行时
    :用于其他运行时依赖项(例如自定义
    文件系统
    实现)
我们为运行时提供的依赖项创建新的gradle配置:

configurations {
  provided,
  compile.extendsFrom provided
}
然后将提供的依赖项标记为:

provided("org.apache.flink:flink-java:1.6.0")  // flink java v1.6.0
然后,我们修改
jar
任务来构建一个没有任何
提供的
依赖项的jar:

结果是一个带有所需依赖项(
compile
)的
jar
,然后使用Web UI进行部署

对于自定义运行时依赖项,我们构建一个自定义Docker映像,并将构建的工件(
runtime.jar
,使用与上面相同的配置构建)推送到Flink中的
libs/
目录。如果您不使用Docker,也可以手动执行此操作


最后,在我们的特殊情况下,在我们的作业和运行时依赖项(使用反射发现)之间没有定义任何直接依赖项。

是的,只是没有任何依赖项(flink core依赖项除外),那么您的胖罐就会变小。如果您有必需的依赖项,则需要包含它们。否则它们将如何在flink容器中结束?是的,只是没有任何依赖项(flink核心依赖项除外),那么您的胖罐就会更小。如果您有必需的依赖项,则需要包含它们。否则它们将如何在flink容器中结束?我可以从fat jar文件中删除所有类,然后将其放入lib目录,然后使用瘦jar文件启动flink吗?我可以从fat jar文件中删除所有类,然后将其放入lib目录,然后使用瘦jar文件启动flink吗?