我爱上了JBoss TattleTale。通常,在我的Ant构建中,我follow the docs来定义Tattletale任务,然后像这样运行它们:
<taskdef name="report"
classname="org.jboss.tattletale.ant.ReportTask"
classpathref="tattletale.lib.path.id"/>
...
<tattletale:report source="${src.dir]" destination="${dest.dir}"/>
我现在正在将我的构建转换为Gradle,并且正在努力弄清楚如何让Tattletale在Gradle中运行。似乎没有Gradle-Tattletale插件,而且我没有足够的经验与Gradle贡献一个。但我也知道Gradle可以运行任何Ant插件,也可以从系统shell执行东西;我只是不确定如何在Gradle中执行此操作,因为此处(尚未)没有任何文档。
所以我问:如何从Gradle构建中运行Tattletale ReportTask
?
以下是Gradle / Ant文档显示的示例:
task loadfile << {
def files = file('../antLoadfileResources').listFiles().sort()
files.each { File file ->
if (file.isFile()) {
ant.loadfile(srcFile: file, property: file.name)
println " *** $file.name ***"
println "${ant.properties[file.name]}"
}
}
}
但是,我在这里没有看到如何/在哪里为Tattletale及其ReportTask
自定义此内容。
答案 0 :(得分:1)
以下内容改编自https://github.com/roguePanda/tycho-gen/blob/master/build.gradle
它绕过ant并直接调用Tattletale Java类。
它被更改为处理WAR,并强制要求更新的javassist以处理Java 8功能,例如lambdas。
configurations {
tattletale
}
configurations.tattletale {
resolutionStrategy {
force 'org.javassist:javassist:3.20.0-GA'
}
}
dependencies {
// other dependencies here...
tattletale "org.jboss.tattletale:tattletale:1.2.0.Beta2"
}
task createTattletaleProperties {
ext.props = [reports:"*", enableDot:"true"]
ext.destFile = new File(buildDir, "tattletale.properties")
inputs.properties props
outputs.file destFile
doLast {
def properties = new Properties()
properties.putAll(props)
destFile.withOutputStream { os ->
properties.store(os, null)
}
}
}
task tattletale(type: JavaExec, dependsOn: [createTattletaleProperties, war]) {
ext.outputDir = new File(buildDir, "reports/tattletale")
outputs.dir outputDir
inputs.files configurations.runtime.files
inputs.file war.archivePath
doFirst {
outputDir.mkdirs()
}
main = "org.jboss.tattletale.Main"
classpath = configurations.tattletale
systemProperties "jboss-tattletale.properties": createTattletaleProperties.destFile
args([configurations.runtime.files, war.archivePath].flatten().join("#"))
args outputDir
}
答案 1 :(得分:0)
之前的答案要么不完整要么过于复杂。我做的是使用gradle中的ant任务,它工作得很好。让我们假设你的tattletale罐子在rootDir / tools /...
之下ant.taskdef(name: "tattleTaleTask", classname: "org.jboss.tattletale.ant.ReportTask", classpath: "${rootDir}/tools/tattletale-1.1.2.Final/tattletale-ant.jar:${rootDir}/tools/tattletale-1.1.2.Final/tattletale.jar:${rootDir}/tools/tattletale-1.1.2.Final/javassist.jar")
sources = "./src:./src2:./etcetera"
ant.tattleTaleTask(
source: sources,
destination: "tattleTaleReport",
classloader: "org.jboss.tattletale.reporting.classloader.NoopClassLoaderStructure",
profiles: "java5, java6",
reports: "*",
excludes: "notthisjar.jar,notthisjareither.jar,etcetera.jar"
){
}
因此上面的代码将在./tattleTaleReport下生成报告。就这么简单。令人烦恼的是 source 变量只接受目录,所以如果你不想扫描那些目录中存在jar,你需要将它们添加到排除参数。