Как уже отмечали другие, для того, чтобы файл jar был исполняемым, точка входа приложения должна быть установлена в Main-Class
атрибуте файла манифеста. Если файлы классов зависимостей не размещены вместе, их необходимо установить вClass-Path
записи файла манифеста.
Я перепробовал все виды комбинаций плагинов и что не для простой задачи создания исполняемого фляги и так или иначе, включая зависимости. Кажется, что всем плагинам так или иначе не хватает, но, наконец, я получил его так, как хотел. Никаких загадочных сценариев, не миллион разных мини-файлов, загрязняющих каталог сборки, довольно чистый файл сценариев сборки и, самое главное, ни один миллион файлов сторонних классов не слился в мой архив jar.
Ниже приводится копипаст из здесь для вашего удобства ..
[How-to] создайте дистрибутивный zip-файл с jar-файлами зависимостей в подкаталоге /lib
и добавьте все зависимости к Class-Path
записи в файле манифеста:
apply plugin: 'java'
apply plugin: 'java-library-distribution'
repositories {
mavenCentral()
}
dependencies {
compile 'org.apache.commons:commons-lang3:3.3.2'
}
// Task "distZip" added by plugin "java-library-distribution":
distZip.shouldRunAfter(build)
jar {
// Keep jar clean:
exclude 'META-INF/*.SF', 'META-INF/*.DSA', 'META-INF/*.RSA', 'META-INF/*.MF'
manifest {
attributes 'Main-Class': 'com.somepackage.MainClass',
'Class-Path': configurations.runtime.files.collect { "lib/$it.name" }.join(' ')
}
// How-to add class path:
// /programming/22659463/add-classpath-in-manifest-using-gradle
// https://gist.github.com/simon04/6865179
}
Хостинг как суть здесь .
Результат можно найти в build/distributions
и разархивированное содержимое выглядит следующим образом:
lib / commons-lang3-3.3.2.jar
MyJarFile.jar
Содержание MyJarFile.jar#META-INF/MANIFEST.mf
:
Версия манифеста: 1.0
Основной класс: com.somepackage.MainClass
Путь к классу: lib / commons-lang3-3.3.2.jar