【问题标题】:Gradle Multi-Module groovy 'Project' object not getting evaluated in helper filesGradle Multi-Module groovy 'Project' 对象未在帮助文件中进行评估
【发布时间】:2020-10-27 13:10:28
【问题描述】:

我有一个具有以下结构的 Java 项目的多模块设置。

mainApp
|--> core-module
|       |--> src
|       |--> build.gradle
|       |--> gradle.properties
|       
|--> lib-module
|       |--> src
|       |--> build.gradle
|       |--> gradle.properties
|--> lib-another-module
|       |--> src
|       |--> build.gradle
|       |--> gradle.properties
|--> settings.gradle
|--> build.gradle

在我的settings.gradle 中我已经指定了。

rootProject.name = 'mainApp'

include 'core-module'
include 'lib-module'
include 'lib-another-module'

在我的 mainApp/build.gradle 文件中,我编写了一个帮助程序为 helper-tasks.gradle 并将该文件导入到我的 $rootDir/build.gradle 文件中

apply from: "$rootDir/helpers/helper-tasks.gradle"

task('bundleJar', type: Jar)subprojects { subproject -> } 闭包的一部分,我将直接调用./gradlew bundleJar。这里的期望是它应该遍历每个子项目并为我的最终包收集类

helper-tasks.gradle 文件中我写了一个gradle tasks 如下

task('bundleJar', type: Jar) {

    manifest {
        attributes 'Manifest-Version': "1.0"
        attributes 'Built-By': USER_NAME
        attributes 'Created-By': "Java Version: " + JAVA_VERSION
        attributes 'Implementation-Version': BUNDLE_VERSION + " Build " + GIT_COMMIT_HASH
        attributes 'Build-Timestamp': BUILD_TIME
    }
    baseName('lib-module')
    from project('lib-module').sourceSets.main.output.classesDirs
}

这里project('lib-module').sourceSets.main.output.classesDirs 没有获取子模块项目$rootDir/lib-module/build/classes/java/main 的相对路径,但仍然引用"$rootDir/build/classes/java/main。为什么?以及如何将我的设置提供给帮助文件?

【问题讨论】:

  • 我是否可以将project 对象提供给我的“helper-tasks.gradle”文件?

标签: java gradle build build.gradle


【解决方案1】:

有一个工作示例here on GitHub

考虑根目录下的build.gradle

subprojects {
    apply plugin: 'java-library'
    apply from: "${rootProject.projectDir}/helpers/helper-tasks.gradle"
}

helpers/helper-tasks.gradle:

task('bundleJar', type: Jar) {
    manifest {
        attributes 'Manifest-Version': "1.0"
        attributes 'Built-By': USER_NAME
        attributes 'Created-By': "Java Version: " + JAVA_VERSION
        attributes 'Implementation-Version': BUNDLE_VERSION + " Build " + GIT_COMMIT_HASH
        attributes 'Build-Timestamp': BUILD_TIME
    }
    baseName("${project.name}") 
    from project.sourceSets.main.output.classesDirs
}

请注意,文件名称现在与项目名称匹配。在示例中,gradle lib-module:bundleJar 将生成具有适当类的 ./lib-module/build/libs/lib-module.jar

同样,gradle lib-another-module:bundleJar 将生成 ./lib-another-module/build/libs/lib-another-module.jar(带有适当的类)。

【讨论】:

  • 感谢您的回答,但我错过了 task('bundleJar', type: Jar)subprojects { subproject -> } 闭包的一部分,我只会打电话给 ./gradlew bundleJar。这里期望它应该遍历每个子项目并为我的最终包收集类
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-09-24
  • 1970-01-01
  • 2019-06-01
  • 2020-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多