首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >目录中的Gradle fatjar

目录中的Gradle fatjar
EN

Stack Overflow用户
提问于 2018-11-04 12:53:21
回答 1查看 640关注 0票数 2

我有一个文件夹($buildDir/some/lib)里面有很多罐子。我想要创建一个罐子,里面有所有的罐子,但没有拉链。我试过很多次,但都失败了,包括以下一件:

代码语言:javascript
复制
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
}

在这种情况下,错误是:

无法将所提供的符号转换为File或URI: file‘/path/ to / the /buidDir/ or /omeJar.jar’。

有什么帮助吗?

编辑:我把它改成了这个,但它还是不起作用。罐子是复制的,但没有打开包装。帮助!为什么这么难?

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

    with jar
}
EN

回答 1

Stack Overflow用户

发布于 2018-11-05 08:57:15

您可以执行以下操作:

代码语言:javascript
复制
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
}

Note

在您的第一个解决方案中,您会得到错误“无法将所提供的符号转换为文件或URI.”因为在eachFile闭包中(参见CopySpec.eachFile(),您可以操作FileCopyDetails对象,而zipTree方法需要Zip路径)。一种解决方案是使用getPath()方法:eachFile { it.isDirectory() ? it : zipTree(it.getPath()) } }

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53141024

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档