繁体   English   中英

如何从Gradle内部运行JBoss TattleTale

[英]How to run JBoss TattleTale from inside Gradle build

我爱上了JBoss TattleTale 通常,在我的Ant构建中,我遵循文档来定义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插件,也可以从系统外壳执行东西。 我只是不确定如何在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进行自定义。

以下改编自https://github.com/roguePanda/tycho-gen/blob/master/build.gradle

它绕过ant并直接调用Tattletale Java类。

它被更改为处理WAR,并要求使用更新的javassist来处理lambda等Java 8功能。

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
}

先前的答案不完整或过于复杂。 我所做的是使用gradle中的ant任务,效果很好。 假设您的故事罐子位于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下生成报告。 就这么简单。 烦人的是, 变量仅接受目录,因此,如果这些目录中存在jar,则您不希望对其进行扫描,则需要将其添加到excludes参数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM