我在gradle java项目上有一个新手问题。我希望将此输出工件jar配置为仅包含项目中的某些类。我将所需的类包含在作为单独任务的一部分生成的文件classes.txt
中。如何配置gradle构建的jar
任务,以便执行此操作。这是我到目前为止所尝试的:
jar {
// reset actions
actions = []
copy {
def dependentClasses = file("classes.txt")
if (dependentClasses.exists()) {
dependentClasses.eachLine { include it }
}
from sourceSets.main.output
includeEmptyDirs = false
into "build/tmp/jar" //Some temporary location
}
// How to zip the contents?
}
对于这个可能天真的问题我很抱歉,但我还没有看到其他解决方案的运气。
谢谢!
答案 0 :(得分:1)
可以通过以下方式完成:
apply plugin: 'java'
jar {
def excluded = project.file('classes.txt').readLines()
exclude { f ->
excluded.any { e -> f.path.replaceAll(File.separator, '.').contains(e) }
}
}
可以找到演示here,Lol1.class
将被排除。
答案 1 :(得分:1)
使用Opal的答案,这里是文件包含的答案
apply plugin: 'java'
jar {
def included = project.file('classes.txt').readLines()
include { f ->
included.any { i -> f.isDirectory() ? true : f.path.replaceAll(File.separator, '.').contains(i) }
}
}
轻微的诀窍是传递给闭包的FileTreeElement
f
也传递了包目录,如果碰巧返回false,则不会遍历下面的子树,因此检查它是一个返回true的目录,以启用子树的处理。
解决方案的演示是here,并且将包含Lol1.class。谢谢你的帮助,Opal!