【问题标题】:How do you list out all output / generate files from a Gradle Build?如何从 Gradle 构建中列出所有输出/生成文件?
【发布时间】:2017-01-18 07:20:54
【问题描述】:

目前我正在使用以下内容生成输出文件列表,我希望这些输出文件用于另一个执行 Github 版本的插件。

[
        "${buildDir}/libs/${project.name}-${project.version}.jar",
        "${buildDir}/libs/${project.name}-${project.version}-javadoc.jar",
        "${buildDir}/libs/${project.name}-${project.version}-sources.jar"
]

我对此不太满意,因为我手动指定了每种类型的文件(文档、源代码、类)。我希望使它更通用,我可以在不进行任何修改的情况下重用任何可能具有或多或少输出的项目,也可能不在默认位置,某些输出甚至可能不是 Java 输出。 IE。更改输出位置、运行或插入脚本其他地方的任务不应破坏脚本的这一部分,并且应该无需编辑即可重用。 问题是如何获得所有输出的列表,如上面的字符串列表。

更详细的代码sn-p:

...

plugins {
    id 'co.riiid.gradle' version '0.4.2'
}

...

ext {
    org = 'MicroTrader'
    repo = org + '/' + project.name
    releaseNotesFile = 'RELEASE_NOTES.md'
    host = 'github.com'
    hostUrl = 'https://' + host + '/'
    orgUrl = hostUrl + org
    websiteUrl = hostUrl + repo
    vcsUrl = websiteUrl + '.git'
    scmUrl = 'scm:git@' + host + ':' + repo + '.git'
    issueTrackerUrl = websiteUrl + '/issues'
    ossrhUsername = ((project.hasProperty('ossrhUsername') ? ossrhUsername : System.getenv('OSSRH_USER')) ?: System.getProperty('ossrh.user')) ?: ' '
    ossrhPassword = ((project.hasProperty('ossrhPassword') ? ossrhPassword : System.getenv('OSSRH_PASSWORD')) ?: System.getProperty('ossrh.password')) ?: ' '
    bintray_user = ((project.hasProperty('bintray_user') ? bintray_user : System.getenv('BINTRAY_USER')) ?: System.getProperty('bintray.user')) ?: ' '
    bintray_api_key = ((project.hasProperty('bintray_api_key') ? bintray_api_key : System.getenv('BINTRAY_KEY')) ?: System.getProperty('bintray.apikey')) ?: ' '
    artifactory_user = ((project.hasProperty('artifactory_user') ? artifactory_user : System.getenv('ARTIFACTORY_USER')) ?: System.getProperty('artifactory.user')) ?: ' '
    artifactory_password = ((project.hasProperty('artifactory_password') ? artifactory_password : System.getenv('ARTIFACTORY_PASSWORD')) ?: System.getProperty('artifactory.password')) ?: ' '
    github_api_key = ((project.hasProperty('github_api_key') ? github_api_key : System.getenv('GITHUB_KEY')) ?: System.getProperty('github.apikey')) ?: ' '
}

...

github {
    owner = project.org
    repo = project.name
    token = project.github_api_key
    tagName = project.version
    targetCommitish = 'master'
    name = 'v' + project.version
    body = Files.exists(Paths.get('' + projectDir + '/' + releaseNotesFile)) ?
            new File('' + projectDir + '/' + releaseNotesFile).text :
            (Files.exists(Paths.get('' + baseDir + '/' + releaseNotesFile)) ?
                    new File('' + baseDir + '/' + releaseNotesFile).text : '')
    assets = [
            "${buildDir}/libs/${project.name}-${project.version}.jar",
            "${buildDir}/libs/${project.name}-${project.version}-javadoc.jar",
            "${buildDir}/libs/${project.name}-${project.version}-sources.jar"
    ]
}

...

【问题讨论】:

    标签: github gradle build build.gradle release


    【解决方案1】:

    尝试读取构建中用于生成工件的所有任务的 outputs 属性:

    project(':my-sub-project').jar.outputs

    另一种选择是使用所有子项目中的archives 配置:

    project(':my-sub-project').configurations.archives.allArtifacts

    【讨论】:

    • 如果你没有子项目,你如何做到这一点。这是我感兴趣的主/根项目。
    • 只需使用<task>.outputs,它将隐式引用当前项目实例(即project.<task>.outputs)。 <task>是实际任务名称,也可以使用tasks.<task name>
    • 太棒了!也许您也可以将其添加到答案中。
    猜你喜欢
    • 1970-01-01
    • 2017-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-15
    • 1970-01-01
    • 2020-04-13
    • 2015-05-13
    相关资源
    最近更新 更多