Итак, мое приложение работает хорошо, когда я запускаю его непосредственно в своей IDE, но когда я пытаюсь выполнить fatJar ( с классическим java -jar locationOfJar) я получаю традиционное сообщение «Ошибка: не удалось найти или загрузить основной класс w.x.y.z.App»
Что я пробовал:
- Я четырежды проверил, что мой основной класс четко определен в моем build.gradle.kts (части приведу позже). Я даже написал этот пост с реальным копированием/вставкой и изменил все с помощью «замены», чтобы проверить, действительно ли они имеют одно и то же имя
- Я распаковал банку и проверил, есть ли там основной класс с правильным именем
- В разархивированной банке я проверил, что каждый импорт присутствует основной класс
- Я проверил, что .jar содержит META-INF/MANIFEST.MF, он содержит 2 строки: Manifest- Версия: 1.0 и основной класс: w.x.y.z.App
- когда я пытаюсь запустить jar (а не fatJar), я получаю сообщение об ошибке " нет основного атрибута манифеста», в то время как манифест тоже там!
Мой build.gradle.kts:
plugins {
id("java")
}
java {
sourceCompatibility = JavaVersion.VERSION_17
}
tasks.register("fatJar") {
group = "build"
archiveClassifier.set("all")
from(sourceSets.main.get().output)
dependsOn(configurations.runtimeClasspath)
from({
configurations.runtimeClasspath.get().map { if (it.isDirectory) it else zipTree(it) }
})
manifest {
attributes["Main-Class"] = "w.x.y.z.App"
}
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
}
dependencies {
...
}
repositories {
mavenCentral()
maven {
name = "Artifact"
url = uri(project.findProperty("mavenRepositoryUrl") as String)
credentials {
username = project.findProperty("mavenRepositoryUsername") as String
password = project.findProperty("mavenRepositoryPassword") as String
}
}
}
Начало класса приложения:
package w.x.y.z;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import ...
public class App {
LoggerFactory.getLogger(App.class);
public static void main(String[] args) {
LOG.info("===== START =====");
...
}
}
Подробнее здесь: https://stackoverflow.com/questions/792 ... nching-jar