如何配置gradle应用程序插件将my user.dir设置为脚本的位置?

如何配置gradle应用程序插件将my user.dir设置为脚本的位置?,gradle,gradle-plugin,Gradle,Gradle Plugin,gradle应用程序插件启动并创建以下目录结构 应用程序 bin-启动服务器的脚本 lib-jar文件 {src/dist中的任何其他内容都会进入app} 我不明白的是,脚本不能使服务器在app目录下运行,这很烦人。是否有一种方法可以对其进行配置并在应用程序目录中运行?或者将user.dir设置为..的方法。。从bin目录中选择相对 这是相当令人沮丧的,因为我必须做一些检查和错误,说程序必须从应用程序目录运行,这样我就知道如何查找文件 现在,如果你有房地产 -Dlogback.configura

gradle应用程序插件启动并创建以下目录结构

应用程序 bin-启动服务器的脚本 lib-jar文件 {src/dist中的任何其他内容都会进入app}

我不明白的是,脚本不能使服务器在app目录下运行,这很烦人。是否有一种方法可以对其进行配置并在应用程序目录中运行?或者将user.dir设置为..的方法。。从bin目录中选择相对

这是相当令人沮丧的,因为我必须做一些检查和错误,说程序必须从应用程序目录运行,这样我就知道如何查找文件

现在,如果你有房地产 -Dlogback.configurationFile=config/logback.xml

如果从计算机上除应用程序目录以外的任何位置运行启动脚本,则静默日志记录将停止工作

谢谢,
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。现在它适用于分发和运行。