
小弟目前想要开发调用 KETTLE 作业的程序,由于需要引用 KETTLE 中所有依赖 jar 包,打包完的 jar 包大小约有 160M 。结果执行时报错“错误: 找不到或无法加载主类”。gradle 结构非常简单,如下:
plugins { id 'org.jetbrains.kotlin.jvm' version '1.4.21' id 'com.github.johnrengelman.shadow' version '6.1.0' } group 'org.example' version '1.0-SNAPSHOT' repositories { mavenCentral() } dependencies { compile "org.jetbrains.kotlin:kotlin-stdlib" compile fileTree(dir:'/Users/xxl/data-integration8.2/lib',include:['*.jar']) } jar { from { configurations.compileClasspath.collect { it.isDirectory() ? it : zipTree(it) } } //设置 zip64,避免报 65535 错误 zip64 true } 只要将 compile fileTree(dir:'/Users/xxl/data-integration8.2/lib',include:['*.jar'])注释,或者减少依赖 jar 包数量,执行就可以正常(不过就会因为缺少依赖报 java.lang.NoClassDefFoundError 了 T.T )
请问这种情况如何处理呢,非常感谢
1 Flywith24 2021-01-06 08:48:35 +08:00 我认为是 /Users/xxl/data-integration8.2/lib 指向的 本地 jar 导致的。很好理解,A 内部引用本地 jar B,此时把 A 打包成 jar 提供其他设备使用是无法找到 B 的(因为它在发布 A 的机器上)。需要做的改动便是把 B 发布出来,使用远程依赖的方式引用,这样其他设备便可以在开发者配置的 maven 仓库中找到 B 。 |
2 heavyrainn OP @flywith24 我后来用 shadowJar 解决了…用 gradle shadowJar 打出来的包是可以执行的 |