2016-08-30 34 views
2

gradle這個應用插件的岩石和創建以下目錄結構如何配置gradle應用程序插件來將我的user.dir設置爲腳本的位置?

應用 斌 - 腳本來啓動服務器 LIB - jar文件 {東西從SRC/DIST否則只是去在app}

事情我無法弄清楚腳本是不是讓服務器運行在令人討厭的app目錄中。有沒有辦法讓它可以被配置並在app目錄中運行? (或者使其將user.dir設置爲...相對於bin目錄的方式)。

這是非常令人沮喪的,因爲我必須做一些檢查和錯誤,說程序必須從應用程序diretory運行,然後我知道如何查找文件。

現在,如果你有一個屬性 -Dlogback.configurationFile =配置/ logback.xml

,你比從應用程序目錄之外的機器上運行的任何地方啓動腳本,默默地記錄停止工作。

感謝, 院長

回答

1

下面的代碼爲我工作(只測試了在Linux上,不知道的窗口部分(

// 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%') 
    } 
} 
+0

hmmmm,不同版本的gradle/groovy然後。 $似乎會導致問題,我試圖逃脫\,但沒有奏效,並嘗試單引號.....錯誤:無法得到未知屬性'APP_HOME'任務':mycoolness-prod:startScripts'類型org .gradle.api.tasks.application.CreateStartScripts。 –

+0

雖然我喜歡這個主意!它吹走我的日誌記錄選項,所以我想我可能會嘗試只是堅持USERDIR,並儘快替換爲APP_HOME,只要我找出如何正確地轉義$ –

+0

真棒!我用你的答案到達了那裏......我在參數中滑入了一個標記,然後我換出了一個工作。謝謝!!!! –

0

基於傑夫·蓋爾的答案,我得到了如下回答在我的Gradle版本的/常規。gradle這個版本2.14-RC-1時髦2.4.4

我只能在Mac上測試。

BIG NO TE:劇本里有'args''這個令人討厭的劇本,而窗戶只有「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%"') 
} 
} 
+0

原始解決方案因爲logback執行新文件(「config/logback.xml」)而崩潰,並且不能解決與user.dir :(因此需要前綴APP_HOME,因爲logback查找忽略user.dir屬性:(。 –

+0

還有一點需要注意的是,在logback文件$ {user.dir}中也必須使用正確的引用應用程序目錄(非常煩人,這一切都不是來自user.dir) –

+0

Dean,謝謝你的回答。它對分配任務有效,但對於'run'任務,我得到了一個關於'JVM_ARGS_TRICK'的錯誤,所以我將'JVM_ARGS_TRICK'改爲'-Ddummy'。現在它適用於分發和運行。 – Anton

相關問題