java - 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 脚本中的变量声明错误
解决方案
推荐阅读
- reactjs - "$npm_execpath" 未被识别为内部或外部命令、程序或可执行批处理文件
- javascript - 使用 Node 为 Vue 应用程序提供服务时,构建会导致空的 HTML 页面出现语法错误
- ios - 是否有任何安全的方法可以在运行时删除和重新配置 Firebase 应用程序
- c# - 获取方法输出/引用参数的基本类型
- javascript - 扩展 `Promise` 并更改 `then` 签名
- php - 检查其中一个对象中是否存在密钥
- ruby - 在 Sinatra 中使用标头进行身份验证
- angular - 如何禁用自动键值排序Angular 6
- php - .htaccess 阻止 CSS、javascript 和图像从子目录获取访问权限
- vb.net - 修改 Outlook 按钮的默认行为