Gradle: как использовать вывод одной банки в качестве ввода для launch4j

Я хотел бы создать исполняемый файл, не помещая все необходимые библиотеки рядом с исполняемым файлом. Раньше с помощью ant я создавал автономный jar-файл с one-jar, а затем заворачивал его в исполняемый файл с помощью launch4j.

У Gradle есть плагины для обоих, и автономные оба работают очень хорошо практически без настройки.

Но как мне использовать созданный one-jar в качестве входных данных для launch4j?

Это мой текущий файл сборки:

apply plugin: 'java'
apply plugin: 'launch4j'
apply plugin: 'gradle-one-jar'

buildscript {
    repositories {
        mavenCentral()
    }

    dependencies {
        classpath 'edu.sc.seis.gradle:launch4j:1.0.6'
        classpath 'com.github.rholder:gradle-one-jar:1.0.4'
    }
}

launch4j {
    mainClassName = "de.my.umkopierer.Umkopierer"
    launch4jCmd = "C:/Program Files (x86)/Launch4j/launch4j"
    jar = "lib/Umkopierer-1.0.jar"
    headerType = "console"
    dontWrapJar = false
}

sourceCompatibility = 1.7
version = '1.0'

jar {
    manifest {
        attributes 'Implementation-Title': 'Umkopierer', 'Implementation-Version': version
    }
}

repositories {
    mavenCentral()
}

dependencies {
    compile group: 'commons-collections', name: 'commons-collections', version: '3.2'
    compile 'com.google.guava:guava:18.0'    
    compile 'com.fasterxml.jackson.core:jackson-core:2.4.4'
    compile 'com.fasterxml.jackson.datatype:jackson-datatype-jdk7:2.4.4'
    compile 'com.fasterxml.jackson.core:jackson-databind:2.4.4'


    testCompile group: 'junit', name: 'junit', version: '4.+'
}

task oneJar(type: OneJar) {
    mainClass = "de.stiffi.umkopierer.Umkopierer"
}

person peez80    schedule 05.12.2014    source источник


Ответы (1)


Я решил это, сделав задачу launch4j createExe зависимой от onejar/fatjar (или любого другого метода создания толстой банки). Например.:

tasks.createExe.dependsOn('oneJar')     


task launch4j(overwrite: true, dependsOn: ['createExe']){
}

Также я думаю, что ваш файл сборки gradle должен содержать атрибут основного класса, например

manifest {
    attributes 'Main-Class':'com.example.MyMainClass'
}

(по крайней мере, это так, если вы используете плагин Fatjar Gradle).

person Mart1n8891    schedule 02.09.2015