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

如何使用Kotlin DSL配置AppEngine Gradle插件

尉迟默
2023-03-14

如https://cloud . Google . com/app engine/docs/standard/Java/tools/Gradle-reference上所述,AppEngine Gradle插件提供如下配置:

appengine {  // App Engine tasks configuration
  run {      // local (dev_appserver) configuration (standard environments only)
    port = 8080                 // default
  }

  deploy {   // deploy configuration
    stopPreviousVersion = true  // default - stop the current version
    promote = true              // default - & make this the current version
  }
}

使用 build.gradlke.kts 时,这样的配置应该是什么样子?

我正在查看AppEngine任务,但不明白如何将其连接到适当的Kotlin DSL设置。

编辑

当简单地将上述块添加到<code>build.gradle时。ktsIntelliJ投诉:

  • 解析的引用:端口
  • 未解析的引用:部署

当从cml运行Gradle时,我得到:

无法打开缓存目录azhqxsd 4 xoovq 4 o 5 dzec 6 iw(/Users/test/)。grad le/caches/4.5/grad le-kot Lin-DSL/azhqxsd 1d 4 xoovq 4 o 5 dzec 6 iw)。内部错误:无法编译脚本,请查看日志了解详细信息

第二版

在下面添加了插件构建脚本块:

val kotlinVersion                    = property("kotlin.version")
val javaVersion                      = "1.8"

buildscript {
    repositories {
        jcenter()
        mavenCentral()
        mavenLocal()
        maven("https://plugins.gradle.org/m2/")
        maven("https://repo.spring.io/milestone")
        maven("https://repo.spring.io/snapshot")
    }
    dependencies {
        classpath("com.google.cloud.tools:appengine-gradle-plugin:1.3.4")
        classpath("org.springframework.boot:spring-boot-gradle-plugin:2.0.0.BUILD-SNAPSHOT")
    }
}

apply {
    plugin("com.google.cloud.tools.appengine")
    plugin("org.springframework.boot")
}

plugins {
    val kotlinVersion = "1.2.0"
    `war`
    `idea`
    id("org.jetbrains.kotlin.jvm") version kotlinVersion
    id("org.jetbrains.kotlin.kapt") version kotlinVersion
    id("org.jetbrains.kotlin.plugin.jpa") version kotlinVersion
    id("org.jetbrains.kotlin.plugin.noarg") version kotlinVersion
    id("org.jetbrains.kotlin.plugin.spring") version kotlinVersion
    id("com.ewerk.gradle.plugins.querydsl") version "1.0.9"
    id("io.spring.dependency-management") version "1.0.3.RELEASE"
}

第三版

我看到这是由kotlinDslAccessorsReport生成的:

/**
 * Retrieves the [appengine][com.google.cloud.tools.gradle.appengine.core.AppEngineExtension] project extension.
 */
val Project.`appengine`: com.google.cloud.tools.gradle.appengine.core.AppEngineExtension get() =
    extensions.getByName("appengine") as com.google.cloud.tools.gradle.appengine.core.AppEngineExtension

/**
 * Configures the [appengine][com.google.cloud.tools.gradle.appengine.core.AppEngineExtension] project extension.
 */
fun Project.`appengine`(configure: com.google.cloud.tools.gradle.appengine.core.AppEngineExtension.() -> Unit): Unit =
    extensions.configure("appengine", configure)

但老实说,我不知道这如何能进一步帮助我。

共有2个答案

施永贞
2023-03-14

使用appengine gradle插件2.0版的类型安全方法:

import com.google.cloud.tools.gradle.appengine.standard.AppEngineStandardExtension

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath("com.google.cloud.tools:appengine-gradle-plugin:2.0.0-rc5")
    }
}

plugins {
    java
    war
    kotlin("jvm") version "..."
}

repositories {
    jcenter()
}
apply {
    plugin("com.google.cloud.tools.appengine")
}

configure<AppEngineStandardExtension> {
    deploy {
        projectId = "..."
        version = "..."
        stopPreviousVersion = true // etc
    }
}
柯景龙
2023-03-14

为了让kotlin-dsl在应用插件的编译时间之前生成静态访问器,您必须使用plugins{}块而不是buildscript{}块。buildscript{}仍然会使依赖项对脚本类路径可见,但您不会获得这些依赖项。

正如您所注意到的,插件的Maven坐标可能与插件Id不同。您可以在<code>设置中处理此问题。gradle与插件管理规范(这里是Android插件的一个示例。下面是我如何处理它(并使用war插件实现最小应用程序):

< code>build.gradle,kts

plugins {
  id("com.google.cloud.tools.appengine") version "1.3.4"
  `war`
}

settings.gradle

pluginManagement {
  repositories {
    gradlePluginPortal()
    google()
  }
  resolutionStrategy {
    eachPlugin {
      if (requested.id.id == "com.google.cloud.tools.appengine") {
        useModule("com.google.cloud.tools:appengine-gradle-plugin:${requested.version}")
      }
    }
  }
}

现在,我已经应用了插件,kotlin dsl将在脚本编译之前生成访问器。

正在运行/gradlew KotlindsAccessor报告,仔细阅读后,我在输出中看到:

/**
 * Retrieves the [appengine][com.google.cloud.tools.gradle.appengine.core.AppEngineExtension] project extension.
 */
val Project.`appengine`: com.google.cloud.tools.gradle.appengine.core.AppEngineExtension get() =
  extensions.getByName("appengine") as com.google.cloud.tools.gradle.appengine.core.AppEngineExtension

/**
 * Configures the [appengine][com.google.cloud.tools.gradle.appengine.core.AppEngineExtension] project extension.
 */
fun Project.`appengine`(configure: com.google.cloud.tools.gradle.appengine.core.AppEngineExtension.() -> Unit): Unit =
    extensions.configure("appengine", configure)

现在,您可以看到 appengine { ... } 代码块将在顶层正常工作。我们只需要根据它的类型弄清楚它里面有什么。请注意,如果我们使用 buildscript {} 而不是插件 {},您必须自己复制/粘贴这些访问器,或者在构建脚本中执行类似 extensions.getByType(com.google.cloud.tools.gradle.appengine.core.AppEngineExtension::class) 之类的操作。

通过搜索,您可以在GitHub上找到< code>AppEngineExtension的源代码。不幸的是,它没有任何方法或字段。它基本上是作为一个“扩展容器”类使用的,在这里和这里(可能还有其他地方)添加了其他扩展。这意味着我们需要做一些类转换技巧来配置这个对象。在我看来,源代码是真正弄清楚如何访问这些类型的对象的唯一方法。

下面显示了如何配置部署扩展(即 DeployExtension)以及如何配置运行扩展(即 RunExtension)。

import com.google.cloud.tools.gradle.appengine.core.DeployExtension
import com.google.cloud.tools.gradle.appengine.standard.RunExtension

appengine {
  ((this as org.gradle.api.plugins.ExtensionAware).extensions.getByName("run") as RunExtension).apply {
    port = 8080
  }
  ((this as org.gradle.api.plugins.ExtensionAware).extensions.getByName("deploy") as DeployExtension).apply {
    stopPreviousVersion = true // default - stop the current version
    promote = true
  }
}

有几个不同的方法来完成以上,但这是我采取的方法。在kotlin-dsl/457解决之前,插件本身应该提供更友好的配置方法,所以我提出了一个问题

 类似资料:
  • 我不知道如何在带有kotlin DSL的gradle构建中使用shadow插件。所有文档都使用groovy dsl。 这是build.gradle.kts的内容: 这是的内容 但是当我尝试进行 时,我收到此错误: 我认为这很奇怪,因为我已经在参数中输入了应用程序主类。 我试着加上这个: 但是当我尝试使用此选项构建时,它抱怨它找不到类型。 我到底做错了什么?

  • 问题内容: Jenkins(Hudson)具有StarTeam插件。如何正确配置? 我已经安装了此插件,但是在构建项目时出现此错误: java.lang.NoClassDefFoundError:com / starbase / starteam / Folder 机器是Windows Server2008。我在文件夹中安装了StarTeam SDK 。 问题答案: 在插件文档页面上有一个提示:

  • 新的Android gradle插件(0.7)似乎包括了对NDK的新支持,但在文档中几乎没有提到它(我找到的唯一参考是一个名为< code>ndkSanAngeles的测试)。 看起来gradle正在寻找NDK,我已经将其包含在PATH中。然而,构建项目失败 < li >哪里出错:任务执行失败':ogl tests:compileDefaultFlavorDebugNdk '。NDK未配置 如何在

  • 这段配置通过上下文进行扫描--我用调试器检查了它。问题可能出在哪里?

  • 我到处寻找如何为IntelliJ IDEA配置antlr4插件。但是我什么也找不到。我只能安装插件。如果我为一个空项目手动添加. g4文件,我会在右键菜单中获得“生成ANTLR识别器”选项。仅此而已。我认为这是非常有前途的插件。有人能告诉/指导我如何继续使用插件吗? 非常感谢。

  • 我们非常有兴趣在我的团队中利用GitHub集成:http://docs.sonarqube.org/display/PLUG/GitHub插件 我们使用Jenkins作为CI服务器,并且已经有GitHub Pull请求生成器在那里工作。我们也一直在使用SonarQube进行分析,但在预览或增量模式以及GitHub集成方面运气不好。目前的版本是SonarQube 5.1.1和GitHub插件版本1.