【问题标题】:How to use variables in a multi-project gradle build system?如何在多项目 gradle 构建系统中使用变量?
【发布时间】:2016-06-23 10:54:21
【问题描述】:

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

def main_class = "foo.Main"
jar {
    manifest {
        attributes 'Main-Class': main_class
    }
}

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

我有一个名为 dist 的任务,它与 project.ext 一起工作:

根项目:

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

一个子项目:

project.ext {
    build_jar = "..."
    app_jar = "..."
}

如何定义一个与jar 一起使用的变量,就像dist 任务一样?

【问题讨论】:

    标签: java gradle build multi-project


    【解决方案1】:

    你可以这样做:

    ext {
      main_class = 'com.Main'
    }
    
    subprojects {
      apply plugin: 'java'
      jar {
        manifest {
            attributes 'Main-Class': main_class
        }
      }
    }
    

    PROJECT_ROOT/build.gradle 文件中。

    【讨论】:

    • 很遗憾,main_class 的值取决于子项目
    • 如果这个值可以保存在 root build.gradle 中,这仍然是可行的。
    【解决方案2】:

    要覆盖子项目的 build.gradle 中的额外属性,您必须将所需的任务(在本例中为 jar task)放在 afterEvaluate 块中。

    根项目 build.gradle:

    subprojects {
        apply plugin: 'java'
        apply plugin: 'application'
    
        ext {
            // the property that should be overridden in suproject's build.gradle
            main_class = ''
        }
    
        afterEvaluate {
            jar {
                manifest {
                    attributes 'Main-Class': main_class
                }
            }
        }
    }
    

    子项目 build.gradle:

    mainClassName = 'project.specific.Main'
    ext.set("main_class", mainClassName)
    // you could also use this notation, but I prefer the first one
    // since it is more clear on what it is doing
    //main_class = mainClassName
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-11
      • 2014-01-28
      • 2012-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-30
      • 1970-01-01
      相关资源
      最近更新 更多