Як зазначали інші, для того, щоб файл jar можна було виконати, вхідна програма програми повинна бути встановлена в Main-Class
атрибуті файлу маніфесту. Якщо файли класу залежності не розміщуються, їх потрібно встановити у Class-Path
записі файлу маніфесту.
Я спробував усілякі комбінації плагінів, і що не для простого завдання - створити виконуваний jar і якось так чи інакше, включати залежності. У всіх плагінах, здається, бракує так чи інакше, але нарешті я отримав це так, як хотів. Ніякі загадкові сценарії, ні мільйон різних міні-файлів, що забруднюють каталог збірок, досить чистий файл сценарію збірки, і перш за все: не мільйон іноземних файлів сторонніх класів не об’єдналися в мій архівний jar.
Далі наведено копію-вставлення звідси для вашої зручності ..
[Як] створити zip-файл розподілу з банками залежності у підкаталозі /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
Class-Path: lib / commons-lang3-3.3.2.jar