gradle - 包含JAR而不过滤二进制换行符

时间:2012-10-02 20:53:34

标签: gradle

我有一个带有SubProjects的项目A

A / B 的A / C

(B和C子项目)。 B和C被编译成一个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之前运行任务。

回到Maven。我只是禁用该文件的过滤,但在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)])
}

1 个答案:

答案 0 :(得分:1)

很好地解决了它。对于未来的googlers。

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 include,则其过滤等。

如果它落入* .jar,它只是在没有过滤的情况下向前复制。阻止graddle / plugin过滤JAR文件中的二进制换行符。