小弟目前想要开发调用 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 打出来的包是可以执行的
|