2

我有一个文件夹($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”。

有什么帮助吗?

编辑:我把它改成了这个,但它仍然不起作用.. jars 被复制但它们没有被解压.. 帮助!为什么这么难?

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

    with jar
}
4

1 回答 1

1

您可以执行以下操作:

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()) } }

于 2018-11-05T08:57:15.820 回答