使用gradle构建java项目,如何在build文件中使用变量

最近在打包发布的时候遇到了一个问题,项目中有很多资源是在工程目录外的,而且好几个工程都用这一份资源。
在build.gradle中我用sourceSet指定了资源目录,然后再代码中用classLoder.getresource获取文件内容。
然后就产生了问题,因为我写代码和发布不在一个环境,发布要在linux上,那我不想每次都修改build文件,怎么才能在gradle.build的时候或者在build文件中使用变量呢。

apply plugin: 'java'

sourceSets {
     main {
         java{
            srcDir "src"
         }
         resources {
             srcDir 'resource'
             srcDir'D:/demo/server/resource/xml'
             srcDir 'D:/demo/server/resource/sensitive'
         }
     }
 }

tasks.withType(JavaCompile) {
    options.encoding = "UTF-8"
}

dependencies {
    compile fileTree(dir: '../resource/libs', include:  '*.jar')
}

build{
    doLast {
        copy {
            from('build/libs') {
                      include('*.jar')
                        }
                        into('../../release/bin')
        }
    }
}
阅读 7k
3 个回答

不想改配置文件你还可以用环境变量啊。gradle使用groovy DSL做配置文件,因此你完全可以写groovy代码实现。

String myProperty = System.getenv("MY_PROPERTY") ?: "defaultValue"

如果你倾向使用System property覆盖默认配置,可以用gradle的properties配置默认参数,并且在gradle命令行上使用-PGRADLE_PROPERTY=newValue覆盖。比如:

gradle.properties:

myProperty = defaultValue

build.gradle:

println myProperty

使用gradle(w) -PmyProperty=newValue tasks覆盖。这种用法详见: https://docs.gradle.org/curre...

Gradle 用的是Groovy语言,加一些DSL, Groovy几乎完成兼容Java, 所以如果你会Java(既然是java项目), 你完全可以在build.gradle里用你所会的java全部技能,按java语法声明和使用变量即可

问问android同学,怎么build的出debug-apk和release-apk的

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题