我正在整理一个旧的开源项目。我决定从装配Ant转移到Gradle. 我从 中提取了一些库mvnCentral,一些是我编写并上传到的GitHub,通过JitPuck我将它们拉到项目中。问题是,当从jar文件运行时,通过linux-терминал,它显示一个错误:
Error: Unable to initialize main class org.opensourcephysics.cabrillo.tracker.Tracker
Caused by: java.lang.NoClassDefFoundError: org/opensourcephysics/display/OSPFrame
带有类的项目本身org/opensourcephysics/display/OSPFrame是通过依赖项拉起来的JitPack。看不懂是什么问题,因为是通过开发环境组装和启动的,没有问题。我自己解压了jar,里面只有Tracker项目(直接就是我的项目)的文件和类。
毕业典礼:
plugins {
id 'java'
}
jar {
manifest {
// This is where the Main class is specified for launching applications (otherwise the jar will not start)
attributes 'Main-Class': 'org.opensourcephysics.cabrillo.tracker.Tracker'
}
}
group 'org.osptracker'
version '1.0-SNAPSHOT'
repositories {
mavenCentral()
// Added JitPack for working with dependencies via GitHub
maven { url 'https://jitpack.io' }
}
dependencies {
compile group: 'com.nativelibs4java', name: 'bridj', version: '0.7.0'
implementation 'com.github.OpenSource-Physics-Tracker:AppleJavaExstensions:70fb48e5fe'
implementation 'com.github.OpenSource-Physics-Tracker:OpenSourcePhysics:0770a07'
implementation 'com.github.OpenSource-Physics-Tracker:FFMpeg:ef6949741c'
compileOnly 'org.projectlombok:lombok:1.18.8'
annotationProcessor 'org.projectlombok:lombok:1.18.8'
}
可以看到,开发环境通过依赖拉取这个库:
也就是说,项目本身并没有启动,因为 NoClassDefFoundError 抱怨库 class org.opensourcephysics,尽管这个库已成功添加到项目中。

项目的 jar 仅包含项目文件的事实是常态。如果你需要创建一个包含所有依赖项的可执行jar,所谓的。fat-jar,那么这已经描述了例如here