gradle - Gradle:shadowJar 将依赖项排除在外
问题描述
在尝试创建胖 jar 时,shadowJar 会遗漏很多依赖项。我从工作 pom.xml 创建了一个 build.gradle 文件。Maven 可以毫无问题地构建一个胖罐子。阅读 Gradle 关于构建 fat jar 的信息,shadowJar 插件似乎是推荐的方法。但是,我的 Gradle fat jar 给出了以下运行时错误:
Jul 19, 2018 2:35:10 PM restclients.RestStatus2Streams writeToStream
SEVERE: Error occurred while instantiating com.me.streams.impl.producer.MarlinProducerV10.
==> java.lang.NoClassDefFoundError: org/apache/hadoop/fs/PathId.
显然,我的远罐子缺少了一些东西。果然,org/apache/hadoop/fs/PathId 和整个依赖目录都丢失了。尽管 pom.xml 没有明确包含 'org.apache.hadoop:hadoop-common' 依赖项,但我明确地将工件作为依赖项添加到我的 build.gradle 文件中,但仍然没有乐趣。
回答几个问题:
- 存储库中是否有 hadoop-common 工件?是的。
- 工件的命名版本是否在存储库中?是的
- 类 PathId 是存储库中的工件吗?工件的“jar xf”表示“是”。
由于 Maven fat jar 完美运行,并且 unjaring Maven fat jar 显示 PathId 类(以及 Gradle fat jar 中缺少的其他类),那么我的 build.gradle 文件和/或 shadowJar 插件和/或 Gradle 有问题。
build.gradle文件:
apply plugin: 'java'
apply plugin: 'maven'
apply plugin: 'com.github.johnrengelman.shadow'
group = 'com.me.ps'
version = me.version
sourceCompatibility = 1.8
targetCompatibility = 1.8
defaultTasks 'shadowJar'
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.github.jengelman.gradle.plugins:shadow:2.0.3'
}
}
repositories {
[...]
}
dependencies {
// Explicityly added to in hopes of being included in the fat jar
compile group: 'org.apache.hadoop', name: 'hadoop-common', version: '2.7.0-me-1803'
// dependencies listed in the pom.xml
compile group: 'com.me.ojai', name: 'me-ojai-driver', version: '6.0.1-me'
compile group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.6.5'
compile group: 'org.apache.kafka', name: 'connect-json', version: '1.0.1-me-1803-streams-6.0.1'
compile group: 'org.apache.spark', name: 'spark-core_2.11', version: '2.2.1'
compile group: 'org.apache.spark', name: 'spark-streaming_2.11', version: '2.2.1-me-1803'
compile group: 'org.apache.spark', name: 'spark-streaming-kafka-0-10_2.11', version: '2.2.1-me-1803'
compile group: 'org.apache.kafka', name: 'kafka-clients', version: '1.0.1-me-1803-streams-6.0.1'
// dependencies not in the pom.xml, but added to make the gradle build work
compile group: 'xerces', name: 'xercesImpl', version: '2.11.0'
compile group: 'org.json', name: 'json', version: '20171018'
compile group: 'com.google.guava', name: 'guava', version: '19.0'
}
shadowJar {
zip64 true
baseName 'me-edge'
}
我的 build.gradle 文件做错了什么?
- 梯度 4.9
- 操作系统:Linux 3.10.0-514.el7.x86_64 amd64
- JVM:1.8.0_151(甲骨文公司 25.151-b12)
解决方案
推荐阅读
- python - 如何将fillna应用于熊猫数据框的最后N列?
- javascript - 一个输入中的多个正则表达式
- excel - 如何在Excel中特定单元格中的每个点/句点之后将每个第一个字母大写
- botframework - 如何将 ILogger 传递给对话框
- php - 仅在控制器存储功能 Laravel 6 上接收字符串“admin”
- javascript - 当我们单击下一步并预览时,隐藏所有文章并按 5 5 显示它们
- terraform - 没有可用的提供者“azure”插件与此 Terraform 版本兼容。Azurerm -1.28 Terraform -
- zsh - 当我调用第 3 方文本替换工具时,zsh 不断从路径中删除尾部斜杠
- amazon-web-services - 使用 AWS 开发工具包获取最新的 Amazon RDS 快照
- c++ - 创建一个带有无限数量参数的静态类函数