我有一个带有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)])
}
答案 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文件中的二进制换行符。