【问题标题】:Gradle fatjar from directory目录中的 Gradle fatjar
【发布时间】:2018-12-13 22:28:23
【问题描述】:

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

有什么帮助吗?

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

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

    with jar
}

【问题讨论】:

标签: java gradle fatjar


【解决方案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 路径。一种解决方案是使用 getPath() 方法:eachFile { it.isDirectory() ? it : zipTree(it.getPath()) } }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-20
    • 1970-01-01
    • 1970-01-01
    • 2015-11-03
    • 2020-04-25
    • 2020-05-28
    • 2019-05-29
    相关资源
    最近更新 更多