如何在多项目 gradle 构建系统中使用变量?

Zso*_*olt 6 java build multi-project gradle

我有一个使用 gradle 管理的多项目结构。所有java子项目都有这个jar块:

def main_class = "foo.Main"
jar {
    manifest {
        attributes 'Main-Class': main_class
    }
}
Run Code Online (Sandbox Code Playgroud)

所以我决定将 jar 块移动到根项目,并且只def main_class在子项目中使用,但无论我如何定义变量main_class,它都不起作用。我也尝试project.ext过。properties {}

我有一个任务,称为dist它与project.ext:

根项目:

subprojects {
    task dist(dependsOn: jar) << {
        copy {
            from('build/libs') {
                include (build_jar)
            }
            into('.')
            rename(build_jar, app_jar)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

一个子项目:

project.ext {
    build_jar = "..."
    app_jar = "..."
}
Run Code Online (Sandbox Code Playgroud)

如何定义与任务一起使用的jar变量dist?

Opa*_*pal 3

你可以这样做:

ext {
  main_class = 'com.Main'
}

subprojects {
  apply plugin: 'java'
  jar {
    manifest {
        attributes 'Main-Class': main_class
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

在PROJECT_ROOT/build.gradle文件中。