2012-07-18 108 views
2

我正在嘗試將簡單的Groovy項目移至Gradle。我大多能夠配置該項目,但我不知道如何處理外部資源。Gradle - 處理外部資源

基本上,我的應用程序需要訪問JSON中的配置文件。在轉移到Gradle之前,我曾經在命令行上傳遞這個JSON文件的位置。我製作了一個簡單的bash腳本,用資源的正確路徑調用主類。

使用Gradle如果我理解正確,我應該能夠將此文件移動到src/main/resources/並從Groovy類以某種方式獲得它。問題是:如何?

編輯

如果我理解正確的話,資源應在被生成JAR結束。我的目錄結構是這樣

src 
    main 
    groovy 
     orgName 
     packageName 
      source.groovy 
    resources 
     orgName 
     packageName 
      config.json 

但我不認爲這是在build目錄

回答

7

我敲了一個簡單的例子......鑑於此目錄結構:

. 
|-- src 
| |-- main 
|   |-- groovy 
|   | \-- org 
|   |   |-- Test.groovy 
|   \-- resources 
|    \-- config.json 
\-- build.gradle 

其中Test.groovy是:

package org 

import groovy.json.* 

public class Test { 
    static main(args) { 
    def slurper = new JsonSlurper() 
    def config = slurper.parseText(Test.class.getResource('/config.json').text) 
    println "Args were $args, config is $config" 
    } 
} 

config.json是:

{ 
    "data": true 
} 

build.gradle是:

apply plugin: 'groovy' 

repositories { 
    mavenCentral() 
} 

dependencies { 
    groovy 'org.codehaus.groovy:groovy-all:2.0.0' 
} 

task runTest (dependsOn: 'classes', type: JavaExec) { 
    main = 'org.Test' 
    classpath = sourceSets.main.runtimeClasspath 
    args 'ARG1' 
} 

你應該只能夠運行gradle runTest,它應該只是工作...

+0

謝謝你,你是我的救星! :-) – Andrea 2012-07-18 08:13:10

+0

不過,我有一個疑問。現在一切正常,但資源不會進入JAR。不應該嗎? – Andrea 2012-07-18 08:15:52

+0

運行'gradle build'(構建jar),那麼它應該在那裏。在這個例子中,'jar -tf build/libs/project.jar'顯示'config.json'作爲jar文件的根目錄... – 2012-07-18 08:19:34

2

搖籃產生並不要求你將這個文件看作一種資源packageName.jar內的資源。這只是一個Java/JVM最佳實踐。如果你這樣做,你將不得不通過類加載器來訪問文件。有關說明,請參見Locating resources in Java。請注意,這與Gradle無關,只是Gradle會將src/main/resources下的文件添加到構建的Jar中。

+0

嗯,我的問題是,我沒有看到在JAR資源。我將編輯問題以顯示我的目錄結構 – Andrea 2012-07-18 08:06:59

+0

您是否檢查過該文件是否包含在Jar中?你可以解壓Jar或使用'jar -tf path/to/jar/file'來列出它的內容。處理類(加載器)API時最常見的錯誤是使用錯誤的資源名稱。 – 2012-07-18 08:13:14