flink 在本地开发和提交到集群时的依赖是不同的,本地因为需要执行,所以一些依赖在本地是需要的,在部署到集群中是不需要的。
maven 中有一个叫 profile 的东西,但由于我使用的是 gradle 中,并没有这个功能,所以需要另外想办法
首先先尝试了一下在 gradle 中设置一个变量,然后在执行打包task 时去更新这个字段去选择相应的依赖
def prod=false
def conditionDependencies = [
"org.apache.flink:flink-table:${flinkVersion}",
"org.apache.flink:flink-table-api-java:${flinkVersion}",
"org.apache.flink:flink-table-api-java-bridge\_${scalaBinaryVersion}:${flinkVersion}",
"org.apache.flink:flink-table-planner-blink\_${scalaBinaryVersion}:${flinkVersion}",
"org.apache.flink:flink-table-planner\_${scalaBinaryVersion}:${flinkVersion}",
"org.apache.flink:flink-clients\_${scalaBinaryVersion}:${flinkVersion}",
_// "ch.qos.logback:logback-core:1.2.3",_
_// "ch.qos.logback:logback-classic:1.2.3"_
]
dependencies {
print("----当前prod=${prod}-------")
if (prod) {
compileOnly(conditionDependencies)
} else {
implementation(conditionDependencies)
}
}
shadowJar {
prod=true
mergeServiceFiles()
}
按上述配置去执行时,发现不行,在执行shadowJar的 task 时,发现dependencies块会比这个 task 先执行,所以就还是会含有相关依赖
和方案1一样,主要是去解决 prod 变量的赋值顺序问题,只要我们能够在执行所有 task 之前让他获取到合适的值,此时就可以完成
那么,怎么让它可以执行任务时候就拿到呢?想到了环境变量,在执行 gradlew 命令时后面可以传参,然后在 gradle.build 中获取,就可以实现了
_// 使用传递的属性_
def prod = System.getProperty("prod") ?: false;
def conditionDependencies = [
"org.apache.flink:flink-table:${flinkVersion}",
"org.apache.flink:flink-table-api-java:${flinkVersion}",
"org.apache.flink:flink-table-api-java-bridge\_${scalaBinaryVersion}:${flinkVersion}",
"org.apache.flink:flink-table-planner-blink\_${scalaBinaryVersion}:${flinkVersion}",
"org.apache.flink:flink-table-planner\_${scalaBinaryVersion}:${flinkVersion}",
"org.apache.flink:flink-clients\_${scalaBinaryVersion}:${flinkVersion}",
_// "ch.qos.logback:logback-core:1.2.3",_
_// "ch.qos.logback:logback-classic:1.2.3"_
]
dependencies {
print("----当前prod=${prod}-------")
if (prod) {
compileOnly(conditionDependencies)
} else {
implementation(conditionDependencies)
}
}
shadowJar {
mergeServiceFiles()
}
修改后,在本地执行main 方法时,就含有上述依赖,在打包时,执行下列命令传递 prod 参数
gradlew -Dprod=true :spendreport-table:shadowJar
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。