2015-05-27 14 views
8

我已經成功配置了我的gradle構建腳本,在根目錄下創建了一個帶有額外'config'文件夾的應用程序的zip分發。此文件夾(至少現在)只包含應用程序正在使用的一個屬性文件,並且位於應用程序的類路徑中。如何爲Gradle的應用程序插件的「運行」任務指定一個額外的文件夾放在類路徑中?

然而,我正在尋找的是一種在應用程序插件中執行「運行」任務的方法。當我嘗試以這種方式運行我的應用程序(用於測試)時,我的程序無法運行,因爲一個類嘗試訪問類路徑根上的此屬性文件。

如果我可以讓IntelliJ或Eclipse將該文件夾添加到類路徑中,就像其他文件夾一樣(src/main/java,src/main/resources,...),那麼我可以運行和在IDE中調試我的代碼而不調用gradle任務。我想盡量避免將這些代碼綁定到任何一個IDE上,這樣當有人需要處理這個項目時,他們只需導入build.gradle文件並讓IDE根據需要創建相應的配置文件。

這裏是我的build.gradle文件:

apply plugin: 'application' 

mainClassName = "MainClass" 

startScripts { 
    // Add config folder to classpath. Using workaround at 
    // https://discuss.gradle.org/t/classpath-in-application-plugin-is-building-always-relative-to-app-home-lib-directory/2012 
    classpath += files('src/dist/config') 
    doLast { 
     def windowsScriptFile = file getWindowsScript() 
     def unixScriptFile = file getUnixScript() 
     windowsScriptFile.text = windowsScriptFile.text.replace('%APP_HOME%\\lib\\config', '%APP_HOME%\\config') 
     unixScriptFile.text = unixScriptFile.text.replace('$APP_HOME/lib/config', '$APP_HOME/config') 
    } 
} 

repositories { 
    ... 
} 

dependencies { 
    ... 
} 

很有可能需要採取什麼是我需要有/ src目錄/距離/ config文件夾被複制到生成目錄,並添加到類路徑,或者將其內容複製到已經在類路徑中的文件夾中。

回答

2

正如您在docs中看到的那樣,run是類型爲JavaExec的任務。因此可以修改類路徑。嘗試將config文件夾添加到類路徑中。見here

+1

我想,如果我們添加一些文件夾到源設置,它會被放到一個jar文件(這只是我的建議,我沒有檢查,它值得檢查)。我們需要單獨的文件夾,即在classpath中,但不在jar中。 – lospejos

15

我最終以Opal的建議作爲暗示,提出了以下解決方案。我增加了以下我的build.gradle文件:

task processConfig(type: Copy) { 
    from('src/main/config') { 
     include '**/*' 
    } 

    into 'build/config/main' 
} 

classes { 
    classes.dependsOn processConfig 
} 

run { 
    classpath += files('build/config/main') 
} 

另外,一個更簡單的方法是將一個運行時依賴添加到我的項目作爲這樣的:

dependencies { 
    ... 
    runtime files('src/main/config') 
} 

我最終沒有這樣做但是,這樣,因爲我的分發包最終在lib文件夾中有.properties文件......而我只是這樣挑剔。

+1

我得到'無法找到方法運行()的參數[build_1b0x3fpm5pz4yarfze7sl1nxw $ _run_closure2 @ 1d610f27]在根項目' – Gus

相關問題