Java 在gradle构建中的jar归档中包含特定类
我有一个关于gradle java项目的新手问题。我希望将这个项目的输出工件jar配置为只包含项目中的某些类。我将所需的类包含在一个文件中,比如Java 在gradle构建中的jar归档中包含特定类,java,gradle,Java,Gradle,我有一个关于gradle java项目的新手问题。我希望将这个项目的输出工件jar配置为只包含项目中的某些类。我将所需的类包含在一个文件中,比如classes.txt,该文件是作为单独任务的一部分生成的。我们应该如何配置gradle构建的jar任务来实现这一点。这就是我迄今为止所尝试的: jar { // reset actions actions = [] copy { def dependentClasses = file("classes.txt")
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?
}
我为这个可能很幼稚的问题感到抱歉,但我还没有看到其他解决方案
谢谢 可以通过以下方式完成:
apply plugin: 'java'
jar {
def excluded = project.file('classes.txt').readLines()
exclude { f ->
excluded.any { e -> f.path.replaceAll(File.separator, '.').contains(e) }
}
}
可以找到演示,
Lol1.class
将被排除。使用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的目录,以支持子树的处理
该解决方案的演示是和Lol1.class将包括在内。谢谢你的帮助,欧泊 谢谢@Opal-我一直在寻找包含特定类而不是排除,但我猜解决方案应该是类似的-我会尝试一下,让你知道。但是,如果你知道解决方案,你可以在这里编辑它本身?顺便说一句,我喜欢系统化的github代码演示组织!不幸的是没有。包含不处理单个文件,而是处理组或模式。Github演示不系统;]您能发布/编辑代码以匹配模式吗?我猜,如果我们传递对应于每个类的特定模式,我们可以达到相同的效果吗?抱歉,如果我完全失去了理解力。。。