如何将项目根目录的外部Groovy类加入sourceSet并可被Java类调用
问题根因
sourceSets中groovy块的include/setIncludes规则仅作用于已经添加到该sourceSet的源目录内的文件,你之前没有将项目根目录加入Groovy源码目录集合,过滤规则无法匹配到根目录下的foo.groovy,因此配置不生效。
可行配置方案
使用如下Gradle配置(Groovy DSL)即可实现需求:
sourceSets { main { groovy { // 1. 先将项目根目录加入Groovy源码目录列表 srcDir projectDir // 2. 仅保留根目录下的foo.groovy作为编译目标,排除根目录下其他Groovy文件避免误编译 include "foo.groovy" } } }
验证与使用说明
- 执行
./gradlew compileGroovy后,该枚举类的编译产物会和标准src/main/groovy下的类一样输出到build/classes/groovy/main目录,模块内的Java类可直接导入使用,和普通Groovy类无差异。 - 模块外的Groovy脚本如需引用:如果是同项目多模块场景,给对应模块添加本模块的依赖即可;如果是独立外部脚本,将本模块编译后的jar包或者classes目录加入脚本的classpath即可正常导入。
建议优先将业务类放到标准的
src/main/groovy目录下,非标准路径的配置会增加项目维护成本,仅当必须放在根目录时使用上述方案。
内容的提问来源于stack exchange,提问作者Vas
相关产品推荐
相关产品推荐

