首页 > 解决方案 > Gradle 不会用 gradle.properties 变量填充文件

问题描述

目前我的项目只是缺少一些在 gradle.properties 上声明的路径,它们是:

M_HOME=/home/<USER>/Manager
JAVA_HOME=/opt/jdk1.8.0_191

在 build.gradle 我有任务编辑和移动要在 buildRpm 任务中引入的 shell 脚本,并使用位于的脚本编译 RPM 包ProjectDir/src/main/resources/template

我的脚本任务如下:

def mHome = project.findProperty('M_HOME')
def javaHome = project.findProperty('JAVA_HOME')

task createScript(type: Copy, dependsOn: build){

    description = "Create a setvar script"

    doLast{
        from 'src/main/resources/template'
        include 'setvar.sh.template'
        expand([
            M_HOME: 'mHome',
            JAVA_HOME: 'javaHome'
        ])
       // into 'out/scripts'
    }
}

并将文件放入ProjectDir/out/resources/main/template

然后在我的 buildRpm 构建任务中如下(不打算放所有代码):

task buildRpm(type: Rpm, overwrite: true, dependsOn: build)
    if(mHome == '' )
        throw new GradleException('** Edit the value of your Manager Home in gradle.properties **')
    into(Home){
        addParentDirs = false
        fileMode 0644
        dirMode 0755

        directory("${Home}/${ packageName }")
        directory("${Home}/${ packageName }/lib")
        directory("${Home}/${ packageName }/config")
        directory("${Home}/${ packageName }/bin")
        directory("${Home}/${ packageName }/logs", 0777)
        from('out/resources/main/template/') {
            into "${ packageName }/bin"
            rename 'setvar.sh.template', "setvar.sh"
            fileMode 0755
        }

(packageName 和 Home 已声明且具有功能性)并将脚本放在/opt/ToolDir/bin

但是,脚本看起来与模板完全相同(没有 .template 扩展名),两个变量都坐在那里并且未修改

M_PATH=${M_HOME}
JAVA_HOME=${JAVA_HOME}

如果变量为空,包含 mHome 的 if 语句确实会引发异常,因此 build.gradle 正在读取变量,我的问题是 gradle 是否将文件中的变量替换为在 gradle.properties 上声明的变量。

或者可能是我在 shell 脚本中的变量声明错误

标签: javagradle

解决方案


推荐阅读