Gradle fatjar из каталога - PullRequest
       13

Gradle fatjar из каталога

0 голосов
/ 04 ноября 2018

У меня есть папка ($buildDir/some/lib), в которой много банок. Я хочу создать банку, в которой есть все эти банки, но они разархивированы. Я перепробовал множество вещей, но все они потерпели неудачу, включая следующую:

task fatJar(type: Jar, dependsOn: 'someTask') {
    manifest {
        attributes 'Main-Class': 'some.Main'
    }
    baseName = project.name + '-all'
    from ("$buildDir/some/lib") {
        eachFile { it.isDirectory() ? it : zipTree(it)  } }

    with jar
}

В этом случае ошибка:

Невозможно преобразовать предоставленную запись в файл или URI: файл «/path/to/the/buidDir/above/someJar.jar'.

Любая помощь?

EDIT: Я изменил это на это, но это все еще не работает .. банки скопированы, но они не распакованы .. помогите! почему это так сложно?

task fatJar(....) {
    manifest {
        .....
    }
    baseName = project.name + '-all'
    FileCollection collection = files("$buildDir/some/lib")
    from collection.collect { it.isDirectory() ? it : zipTree(it) }

    with jar
}

1 Ответ

0 голосов
/ 05 ноября 2018

Вы можете сделать следующее:

task fatJar(type: Jar) {
    manifest {
        attributes 'Main-Class': 'some.Main'
    }
    baseName = project.name + '-all'
    project.fileTree("$buildDir/some/lib").forEach { jarFile ->
        from zipTree(jarFile )
    }
    with jar
}

Примечание

В первом решении вы получите ошибку "Невозможно преобразовать предоставленную нотацию в файл или URI ..." , потому что в закрытии eachFile (см. CopySpec.eachFile () вы манипулируете FileCopyDetails объектами, в то время как метод zipTree ожидает Zip Path . Одним из решений будет использование getPath() метода: eachFile { it.isDirectory() ? it : zipTree(it.getPath()) } }

...