2

我有带有子项目的项目 A

A/B 空调

(B 和 C 子项目)。B 和 C 被编译成 A 成一个 Jar 文件。使用下面的代码。

gradle.taskGraph.whenReady {
    jar {
    from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }

    manifest {
        attributes("Main-Class": "brut.apktool.Main")
    }
    }
}

这很好用,但我在 /a/b/src/main/resources/prebuilt.jar 中有一个预构建的 JAR。这个jar只是封装了我在程序中需要的一些随机文件。没有任何java或任何东西。我从 inputStream 中获取它们,但是在使用 Gradle 构建之后,它会转换二进制换行数据,然后弄乱存档。

我尝试使用构建的 CopyTask 帖子复制 jar,但我永远无法在 gradle.TaskGraph.whenReady 之前运行任务。

回到马文。我只会禁用对该文件的过滤,但在 Gradle 中找不到相同的表达式。

编辑:这是我目前所做的,它将我的更改过滤到属性文件中,但不进行换行过滤。

processResources {
    ext.fullrev = ''
    ant.loadfile(srcFile: "../../.git/refs/heads/master", property: ext.fullrev)
        filter(FixCrLfFilter)
    filter(org.apache.tools.ant.filters.ReplaceTokens, tokens: [version: apktoolversion, gitrev: ant.properties[ext.fullrev].substring(0,10)])
}
4

1 回答 1

1

很好解决了。对于未来的谷歌人。

processResources {
    from('src/main/resources/properties') {
        include '**/*.properties'
        into 'properties'
        ext.fullrev = ''
        ant.loadfile(srcFile: "../../.git/refs/heads/master", property: ext.fullrev)
        filter(ReplaceTokens, tokens: [version: apktoolversion, gitrev: ant.properties[ext.fullrev].substring(0,10)])
    }
    from('src/main/resources/') {
        include '**/*.jar'
    }

    includeEmptyDirs = false
}

很简单的解释。如果文件属于我的 *.properties 包含,那么它的过滤等。

如果它落入 *.jar,它只是向前复制而不过滤。防止 graddle/plugin 过滤 JAR 文件中的二进制换行符。

于 2012-10-18T17:43:28.127 回答