如何在Kotlin项目与Gradle之间共享Datasource.kt代码?
解决Kotlin Appium项目中共享Datasource给代码和Gradle构建脚本的问题
核心思路
把Datasource.kt放到Gradle的buildSrc目录中——这个目录的代码会被Gradle自动编译并加入构建脚本的类路径,同时通过配置让主项目代码也能依赖这个目录的编译产物,实现单一数据源。
具体步骤
1. 构建buildSrc目录结构
在项目根目录创建如下结构:
项目根目录 ├── buildSrc │ ├── build.gradle.kts │ └── src │ └── main │ └── kotlin │ └── [你的包路径] │ └── Datasource.kt ├── [你的主Appium模块,比如app] │ └── build.gradle.kts └── settings.gradle.kts
把你现有的Datasource.kt移动到buildSrc/src/main/kotlin/[你的包路径]下,删除Gradle脚本和主项目中的重复实现。
2. 配置buildSrc的构建脚本
编辑buildSrc/build.gradle.kts,确保它能生成可被主项目依赖的jar包:
plugins { `kotlin-dsl` `java-library` } repositories { mavenCentral() } dependencies { implementation(kotlin("stdlib")) } java { sourceCompatibility = JavaVersion.VERSION_11 // 匹配你项目的Java版本 targetCompatibility = JavaVersion.VERSION_11 }
3. 让主项目依赖buildSrc的产物
在你的主Appium模块(比如app/build.gradle.kts)中添加依赖,确保项目代码能访问Datasource:
dependencies { // 依赖buildSrc编译出的jar implementation(files(project(":buildSrc").tasks.named("jar").get().outputs.files)) // 保留你原有的其他依赖(Appium、JUnit等) implementation("io.appium:java-client:8.5.1") testImplementation("org.junit.jupiter:junit-jupiter-api:5.9.2") // ... }
4. 验证引用
- Gradle脚本中:直接导入
Datasource的包路径即可使用,和你之前的写法一致:import [你的包路径].Datasource tasks.test { useJUnitPlatform { if (!Datasource.hasSomeThings) { println("Gradle excluding \"SomeThings\" tests tag") excludeTags("SomeThings") } } } - 项目代码中:同样导入包路径后使用:
import [你的包路径].Datasource if (Datasource.getValue("key").isFeatureEnabled()) { // 检查对应按钮是否存在 }
注意事项
Datasource.kt必须是纯Kotlin代码,不能依赖Gradle特有的API(比如org.gradle.api下的类),否则主项目代码会出现依赖错误。- 确保
buildSrc中使用的Kotlin版本和主项目一致,避免兼容性问题。
内容的提问来源于stack exchange,提问作者Andrei Nagy
相关产品推荐
相关产品推荐

