当前位置: 首页 > 知识库问答 >
问题:

如何解析和修改build.Gradle.kts Kotlin Gradle构建脚本?

太叔栋
2023-03-14
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile

plugins {
    id("org.springframework.boot") version "2.2.6.RELEASE"
    kotlin("jvm") version "1.3.71"
    etc...
}

group = "net.myProject"
version = "1.0"
java.sourceCompatibility = JavaVersion.VERSION_11

val developmentOnly by configurations.creating
configurations {
    runtimeClasspath {
        extendsFrom(developmentOnly)
    }
}

repositories {
    mavenCentral()
}

dependencies {
    implementation("org.springframework.boot:spring-boot-starter-actuator")
    testImplementation("org.springframework.boot:spring-boot-starter-test") {
        exclude(group = "org.junit.vintage", module = "junit-vintage-engine")
    }
    etc...
}

tasks.withType<Test> {
    useJUnitPlatform()
}

tasks.withType<KotlinCompile> {
    kotlinOptions {
        freeCompilerArgs = listOf("-Xjsr305=strict")
        jvmTarget = "1.8"
    }
}

我知道这是一个专门用于Gradle构建脚本的DSL,但是我在哪里可以找到它,如何解析/使用它呢?

谢谢!

共有1个答案

伯英武
2023-03-14

不幸的是,kotlin似乎没有提供它自己的解析器,这意味着不会有一个简单的答案,您将不得不处理后续的语言更新。您可能还希望确保解析的结构允许保留空白以保持格式完整。

ktlint可能是一个有趣的起点。它使用IntelliJ中的PSI元素,还重用IntelliJ的解析器。

val normalizedText = text.replace("\r\n", "\n").replace("\r", "\n")
val positionByOffset = calculateLineColByOffset(normalizedText)
val fileName = if (script) "file.kts" else "file.kt"
val psiFile = psiFileFactory.createFileFromText(fileName, KotlinLanguage.INSTANCE, normalizedText) as KtFile
val errorElement = psiFile.findErrorElement()
if (errorElement != null) {
    val (line, col) = positionByOffset(errorElement.textOffset)
    throw ParseException(line, col, errorElement.errorDescription)
}
val rootNode = psiFile.node
// use visitor pattern on rootNode

坦率地说,除非这能给你的项目带来很大的价值,否则我会尝试找到一个不同的解决方案。也许您可以从像json文件这样的易于解析的源代码中读取build.gradle.kts中的值?

 类似资料:
  • 问题 你想读取一个XML文档,对它最一些修改,然后将结果写回XML文档。 解决方案 使用 xml.etree.ElementTree 模块可以很容易的处理这些任务。 第一步是以通常的方式来解析这个文档。例如,假设你有一个名为 pred.xml 的文档,类似下面这样: <?xml version="1.0"?> <stop> <id>14791</id> <nm>Clark &amp

  • 简易 XML 操作 通过本文,您将了解使用 Groovy 分解 XML 是多么地容易。在本期的 实战 Groovy 中,作者 Scott Davis 演示了无论您是使用 MarkupBuilder 和 StreamingMarkupBuilder 创建 XML,还是使用 XmlParser 和 XmlSlurper 解析 XML,Groovy 都提供了一系列用于处理这类流行数据格式的工具。 XML

  • 问题内容: java.library.path属性似乎是只读的。例如,当您在以下构建文件上运行ant时 你得到 输出表明 java.library.path 尚未更改,但是 some.other.property 设置正确。 我想知道如何在构建文件中修改java.library.path。实际上,在ant命令行上指定java.library.path并不是一个简单的选择,因为那时还不知道库路径位置

  • 问题内容: 我有一个XML文件,我需要在其中搜索特定的标签并更新其值。问题在于,使用Sax解析器是“必须的”。我必须通过“仅”使用Sax解析器来找到这些标签,dom stax j4dom dom4j解析器不在考虑范围之内。 我可以通过将xml文件转换为字符串并使用sax解析器对其进行解析并按对象附加新值来完成此任务吗?可以吗 或您会推荐什么? 问题答案: 这是一个有效的代码,只需添加缺少的导入。它

  • 我在Android Studio中创建了一个新项目,并将gradle buildscript转换为使用kotlin dsl,如下所示: build.gradle.kts(项目) build.gradle.kts(app) 最后,build.gradle.kts(BuildSrc) 这可以正常工作,并且项目可以按预期构建。 现在我想将其中一些硬编码的版本号和名称提取到常量中。例如,我想将这一行:”)