【问题标题】:How do I create two tasks in Gradle如何在 Gradle 中创建两个任务
【发布时间】:2020-01-31 02:36:33
【问题描述】:


我有一个使用 Gradle 作为构建系统的 Java 项目。
我需要创建两个单一用途的构建任务,但使用不同版本的 jar 文件。
具体来说,我需要:

  • 本地机器中的构建任务使用 -LOCAL 版本的 .jar(例如 projectName-LOCAL.jar

  • GitLab CI\CD 系统中的构建任务使用编号版本 (projectName-1.1.1.jar)

GitLab CI\CD 的版本取自提交标签,来自 GitLab 预定义的 ENV 变量。

所以,我有一个默认的 build.gradle 文件,其中:

group = 'projectName'
version = 'LOCAL'
sourceCompatibility = '11'

jar {
    manifest {
        attributes "Main-Class": "projectName.Application"
    }
    from {
        configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }
    }
}

此任务必须在本地机器上运行并创建 projectName-LOCAL.jar。他正在做的是。
如何在具有 numbered 版本的另一个任务中实现这一点,特别是对于 GitLab CI\CD?

【问题讨论】:

  • 您好,欢迎您。这个问题非常开放,有很多不同的方法可以实现您的要求。不幸的是,这里的成员通常对为你做你的工作不感兴趣。如果您提供您的努力示例,并详细说明您尝试了什么以及为什么它们没有奏效,那么您通常会有更多的运气。我建议考虑制作自己的临时任务。然后分别研究如何扩展任务以继承行为(例如从 Jar 任务类型)。
  • 还有一些插件,比如shadow jar插件,它在某些方面需要大量的工作。但是,有效地使用它还需要您了解创建和配置任务的基础知识。我以 shadow 为例,这个插件专门用于创建包含所有依赖项的胖 jar 以独立运行,这可能会也可能不会满足您的需求

标签: java gradle build.gradle


【解决方案1】:

Gradle 默认将 jar 文件命名为 ${baseName}-${appendix}-${version}-${classifier}.${extension}

因此您可以根据条件简单地更改version

这样的事情应该可以工作:

ext {
    isLocal = System.getenv('ENV') == 'LOCAL'
}

jar {
    if (isLocal) version = 'LOCAL'
}

对于本地工作,您可以使用 ENV=LOCAL ./gradlew jar 并使用您的普通命令,而不使用 GitLab 的 ENV 部分。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-23
    • 2015-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-31
    • 1970-01-01
    相关资源
    最近更新 更多