Gradle - 处理外部资源

时间:2012-07-18 07:44:07

标签: groovy classpath gradle

我正在尝试将一个简单的Groovy项目移动到Gradle。我几乎能够配置项目,但我不知道如何处理外部资源。

基本上,我的应用程序需要访问JSON中的配置文件。在转移到Gradle之前,我曾经在命令行上传递此JSON文件的位置。我创建了一个简单的bash脚本来调用主类,并使用正确的资源路径。

如果我理解正确,使用Gradle,我应该能够将此文件移动到src/main/resources/并从Groovy类中以某种方式提供它。问题是:如何?

修改

如果我理解正确,资源应该在构建的JAR中结束。我的目标结构就像

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

但是我没有看到在build目录中生成的packageName.jar中的资源

2 个答案:

答案 0 :(得分:8)

我敲了一个简单的例子......鉴于这个目录结构:

.
|-- 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并且它应该正常工作......

答案 1 :(得分:2)

Gradle并未强制要求您将文件视为资源。它只是Java / JVM的最佳实践。如果这样做,则必须通过类加载器访问该文件。有关说明,请参阅Locating resources in Java。请注意,这与Gradle无关,只是Gradle会将src/main/resources下的文件添加到构建的Jar中。