如何配置gradle应用程序插件将my user.dir设置为脚本的位置?
gradle应用程序插件启动并创建以下目录结构 应用程序 bin-启动服务器的脚本 lib-jar文件 {src/dist中的任何其他内容都会进入app} 我不明白的是,脚本不能使服务器在app目录下运行,这很烦人。是否有一种方法可以对其进行配置并在应用程序目录中运行?或者将user.dir设置为..的方法。。从bin目录中选择相对 这是相当令人沮丧的,因为我必须做一些检查和错误,说程序必须从应用程序目录运行,这样我就知道如何查找文件 现在,如果你有房地产 -Dlogback.configurationFile=config/logback.xml 如果从计算机上除应用程序目录以外的任何位置运行启动脚本,则静默日志记录将停止工作 谢谢,如何配置gradle应用程序插件将my user.dir设置为脚本的位置?,gradle,gradle-plugin,Gradle,Gradle Plugin,gradle应用程序插件启动并创建以下目录结构 应用程序 bin-启动服务器的脚本 lib-jar文件 {src/dist中的任何其他内容都会进入app} 我不明白的是,脚本不能使服务器在app目录下运行,这很烦人。是否有一种方法可以对其进行配置并在应用程序目录中运行?或者将user.dir设置为..的方法。。从bin目录中选择相对 这是相当令人沮丧的,因为我必须做一些检查和错误,说程序必须从应用程序目录运行,这样我就知道如何查找文件 现在,如果你有房地产 -Dlogback.configura
Dean下面的代码只在linux上测试过,对windows部分没有把握
// set user.dir to the distribution directory so that the config directory can be located
CreateStartScripts startScripts = project.startScripts
startScripts.with {
doLast {
unixScript.text = unixScript.text.replaceFirst('(?<=DEFAULT_JVM_OPTS=)((\'|\")(.*)(\'|"))(?=\n)',
"-Duser.dir=$APP_HOME")
windowsScript.text = windowsScript.text.replaceFirst('(?<=DEFAULT_JVM_OPTS=)(.*)(?=\r\n)',
'-Duser.dir=%APP_HOME%')
}
}
根据Jeff Gaer的答案,我在我的gradle/groovy版本中得到了以下答案。gradle版本2.14-rc-1 groovy 2.4.4 我只在mac上测试过 值得注意的是:bash one的脚本中有“args”,这很烦人,而windows只有args,所以我不得不做的替换有点不同。我认为他的答案是正确的,因为它使我得到了答案
applicationDefaultJvmArgs = ['JVM_ARGS_TRICK']
//Here, we must modify the start scripts to set user.dir property so no matter where the script is run from,
//the user.dir will point to APPNAME directory
CreateStartScripts startScripts = project.startScripts
startScripts.with {
doLast {
//A slash in groovy allows us to not escape double quotes AND single quotes
def slashString = /'"JVM_ARGS_TRICK"'/
//for some reason, gradle prints '"jvm args"' why? I don't know but must swap quote and double quote
unixScript.text = unixScript.text.replace(slashString,
'"-Dlogback.configurationFile=$APP_HOME/config/logback.xml -Duser.dir=$APP_HOME"')
windowsScript.text = windowsScript.text.replace('"JVM_ARGS_TRICK"',
'"-Dlogback.configurationFile=%APP_HOME%/config/logback.xml -Duser.dir=%APP_HOME%"')
}
}
嗯,不同版本的gradle/groovy。$似乎会引起问题,我尝试使用\进行转义,但无效,尝试使用单引号。。。。。错误:无法获取任务的未知属性“APP\u HOME”:类型为org.gradle.api.tasks.application.CreateStartScripts的MyColness prod:startScripts。不过我喜欢这个主意!!!它也破坏了我的日志选项,所以我想我可能会尝试粘贴USERDIR,并在我找到如何逃离$properlyawesome的方法后立即用APP_HOME替换它!!!我带着你的答案到了那里…我在args中插入了一个令牌,然后交换了有效的令牌。谢谢原始解决方案已损坏,因为logback会生成新的Fileconfig/logback.xml,而这不会解析vs.user.dir:因此需要在其上加前缀APP_HOME,因为logback查找会忽略user.dir属性:。另一个注意事项是,logback文件${user.dir}还必须用于正确引用应用程序目录非常烦人这不是从user.dir开始的Dean,谢谢你的回答。它对我来说适用于分发任务,但对于运行任务,我得到了一个关于JVM_ARGS_技巧的错误,所以我将JVM_ARGS_技巧更改为-Ddummy。现在它适用于分发和运行。