Как указать основной класс при использовании плагина fatjar в gradle.build
Мне интересно создать единую банку, содержащую все зависимости модуля и внешние банки в одном исполняемом файле jar, который я смогу запустить с помощью java -jar myApp.jar
.
У меня есть модуль A, который зависит от модуля B.
В настоящее время я использую gradle, а мой build.gradle
script выглядит следующим образом:
apply plugin: 'fatjar'
description = "A_Project"
dependencies {
compile project(':B_Project')
compile "com.someExternalDependency::3.0"
}
Когда я создаю его с помощью команды gradle: clean build fatjar
, создается жирная банда "A.jar", как и ожидалось.
Но запустив его, когда я написал выше, выполните:
no main manifest attribute, in A.jar
Как изменить файл build.gradle
и указать основной класс или манифест?
Ответы
Ответ 1
Я сам это понял:
Я использовал задачу uberjar Gradle.
теперь мой файл build.gradle выглядит следующим образом:
apply plugin: 'java'
apply plugin: 'application'
mainClassName = 'com.organization.project.package.mainClassName'
version = '1.0'
task uberjar(type: Jar) {
from files(sourceSets.main.output.classesDir)
from {configurations.compile.collect {zipTree(it)}} {
exclude "META-INF/*.SF"
exclude "META-INF/*.DSA"
exclude "META-INF/*.RSA"
}
manifest {
attributes 'Main-Class': 'com.organization.project.package.mainClassName'
}
}
dependencies {
compile project(':B_Project')
compile "com.someExternalDependency::3.0"
}
и теперь я использую его с командой:
чистая сборка uberjar
и он создает один хороший runnable jar:)
Ответ 2
Чтобы заставить его работать с использованием fatjar, я добавил раздел манифеста в задачу fatJar:
task fatJar(type: Jar) {
baseName = project.name + '-all'
from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
with jar
manifest {
attributes 'Implementation-Title': 'Gradle Quickstart', 'Implementation-Version': version
attributes 'Main-Class': 'com.organization.project.package.mainClassName'
}
}