我正在尝试将一个简单的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中的资源
答案 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中。