444 字
2 分钟
让你的kotlin def文件支持相对路径

由于我自己写了一个软件在windows上开发(现在已经换到linux了)并通过cicd自动部署到我的服务器上,这就有了一个问题,既然def文件 都是以绝对路径来写头文件和.a文件的路径的那到了cicd中这个路径就不存在导致无法编译, 于是我就自己写了一个gradle插件来解决这个问题

解决方案#

使用字符串替换的形式动态的将项目的路径替换调原本的字符串模板并且生成一个新的文件将其使用gitignore忽略

开源地址: https://github.com/RTAkland/kdef

工作流程#

用户创建一个模板def文件在需要路径的地方填入 {{PATH}} 然后将其使用git追踪, 然后配置插件,将这些模板文件作为输入源, 运行gradle任务之后自动生成替换后的def文件并且不被git追踪。

插件原理#

注册一个任务 + 一个配置项,配置输入输出目录,然后动态替换

配置插件#

首先在settings.gradle.kts 中添加我的maven仓库

// settings.gradle.kts
pluginManagement {
    repositories {
        mavenCentral()
        gradlePluginPortal()
        // 添加这一行
        maven("https://repo.maven.rtast.cn/releases/")
    }
}

然后在你需要使用插件的模块中配置插件

// build.gradle.kts
plugins {
    // ...
    id("cn.rtast.kdef") version "<version>"
}

插件的最新版本可以在这里找到

配置插件输入输出的目录/文件

kdef {
    // 这一行表示将`src/cinterop/def`这个文件夹作为输出目录
    outputDir = project.layout.projectDirectory.dir("src/cinterop/def").asFile
    // 这里表示列出`src/cinterop/def/template`目录下的所有文件作为输入源
    defFiles.addAll(
        project.layout.projectDirectory.dir("src/cinterop/def/template")
            .asFile.listFiles()!!.toList())
}

运行 ./gradlew replaceDef之后就可以看到生成的def文件了

最后记得将生成def的目录不要被git追踪~