Подтвердить что ты не робот

Как указать основной класс при использовании плагина 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 и указать основной класс или манифест?

4b9b3361

Ответ 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'
    }
}