Groovy 从项目中读取渐变路径

Groovy 从项目中读取渐变路径,groovy,gradle,Groovy,Gradle,有没有办法从我的Gradle构建的groovy项目中访问Gradle groovy插件源集dirs?我正在寻找默认的gradlesrc和resources目录 我需要它来避免在我的项目中硬编码资源目录,但使用默认的Groovy插件资源目录(resources/main)。你能解释一下这个用例吗?在gradle构建中,您可以访问Gradles groovy插件引入的groovy sourceSets目录,如下所示: apply plugin:'groovy' task printGroovySo

有没有办法从我的Gradle构建的groovy项目中访问Gradle groovy插件源集dirs?我正在寻找默认的gradlesrc和resources目录


我需要它来避免在我的项目中硬编码资源目录,但使用默认的Groovy插件资源目录(resources/main)。

你能解释一下这个用例吗?在gradle构建中,您可以访问Gradles groovy插件引入的groovy sourceSets目录,如下所示:

apply plugin:'groovy'

task printGroovySourceDirs << {
    sourceSets.main.groovy.srcDirs.each{
        println it.absolutePath
    }
}
apply插件:'groovy'

task printGroovySourceDirs您不应该将生产代码与测试源和测试资源混为一谈。我建议您在项目中使用以下src目录布局(groovy插件的默认布局):

  • “src/main/groovy”中的groovy生产代码
  • 在“src/test/groovy”中用java或groovy编写的单元测试 *.groovy资源,用于在“src/test/resources”中测试DSL
现在,您可以通过

URL url = this.getClass().getResource("/testDsl.groovy");
File testDslFile = new File(url.getFile()); 

谢谢,但我确实有兴趣从已建项目本身阅读该物业(尤其是“资源/主要”),你知道是否可能吗?(我在项目类路径中有gradle core和gradle插件JAR)这在目前是不可能的(在合理的工作量内)。我仍然对你的用例感兴趣!为什么您的项目在运行时需要知道其源(在您的例子中是资源源)的位置?我开发了一个Groovy DSL,它的集成测试读取位于src文件夹中的.Groovy文件,所以“src/test/Groovy”的路径对我也适用。我是否可以解析build.gradle并从构建脚本中获取此路径,或者至少获取默认路径?(可能使用GroovyDefaultSourceSet?)仍然不确定,我是否理解您试图做的事情,但这里有另一个想法:您可以在构建过程中生成/预处理groovy类,并将其与项目的其他源放在一起。在预处理/生成这个类的过程中,您将目录列表连接到这个groovy类中。现在,您可以从应用程序代码中使用此类来引用资源源文件夹。