包括与摇篮科特林DSL脚本

Manushin伊戈尔:

我想开始使用科特林DSL与具有以下限制的gradle项目:

  • 项目有不同的模块(另外:有时候这些模块使用不同的插件,但是如果两个项目使用相同的插件,那么插件的版本是一样的)。
  • 项目只有企业内部的资源库(例如,我们不直接使用jcenter,我们使用代理吧)。

我们有什么用Groovy:

  • 一些常见的配置项被排除到单独的脚本。请检查下面的例子。
  • 摇篮模块包括这些文件。

结果(只是基于我的例子):

  • 我们不需要相同的代码行添加到每个模块。
  • 最的项目都只是依赖列表差异。

我试图重现与Gralde KTS相同,收到了以下困难:

  • 我无法在包括文件和模块中使用它来应用插件。在这种情况下,我收到编译错误(因为类型的插件不会添加到模块脚本)。
  • 我无法提取常数的共同的东西在每个脚本(根使用它们build.gradle.kts包括在内)。使用Groovy,我可以只使用像变量springBootVersion,但与科特林脚本我必须创建在每个模块文件相同的属性。
  • 预编译脚本插件不工作没有公共的资源访问(例如,我无法配置常用脚本文件与理念“只使用默认的嵌入式脚本科特林版本,从以下网址下载所有的依赖关系:......”。

包括文件示例:

apply plugin: 'kotlin'

compileKotlin {
    kotlinOptions {
        jvmTarget = "1.8"
    }
}

compileTestKotlin {
    kotlinOptions {
        jvmTarget = "1.8"
    }
}

摇篮模块示例:

apply from: "${rootDir}/gradle/include/kotlin-common-include.gradle"

dependencies {
    compile project(':my.project.libraries.common') 

    compile group: 'org.springframework.boot', name: 'spring-boot-starter-web', version: springBootVersion
}

问题:

  • 我怎样才能把所有公用常数(如依赖版本)到单独的文件中只是使用类似,包括他们springBootVersionConstants.springBootVersion编译时检查?
  • 我如何可以提取插件应用到包括脚本(以避免摇篮模块脚本超负荷)?
  • 如何使用预编译脚本插件没有公众的全球存储库访问?

其他链接:

Izbassar Tolegen:

有在当前科特林DSL(5.3)的限制,以防止有编译时检查无处不在。为了科特林DSL工作它必须在摇篮API之上添加扩展,它不能做到这一点神奇。首先,你需要经过科特林DSL入门页面去了解它。

我如何可以提取插件应用到包括脚本(以避免摇篮模块脚本超负荷)?

这样做的一个方法是使用预编译的构建脚本与科特林DSL插件。为了做到这一点,你需要你的脚本进入$rootDir/buildSrc项目。这里怎么可能是这样的:

// $rootDir/buildSrc/build.gradle.kts
plugins {
  `kotlin-dsl`
}
repositories {
   maven {
     url = uri("http://host:8082/artifactory/...")
  }
}

然后把你常用的书写这样的:

// $rootDir/buildSrc/src/main/kotlin/common.gradle.kts
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile

plugins {
  kotlin("jvm") version "1.3.21"
}
tasks.compileKotlin {
  kotlinOptions.jvmTarget = "1.8"
}
tasks.compileTestKotlin {
  kotlinOptions.jvmTarget = "1.8"
}

然后,您可以将此脚本作为一个这样的插件:

// $rootDir/build.gradle.kts
subprojects {
  apply(id = "common")
}

如何使用预编译脚本插件没有公众的全球存储库访问?

配置自定义库的预编译脚本,插件是你平时的构建脚本没有什么不同。那样做:

// $rootDir/buildSrc/settings.gradle.kts
pluginManagement {
  repositories.maven {
    url = uri("http://host:8082/artifactory/...")
  }
}

各地,如果你不想使用预编译的插件的另一种方法是配置扩展明确。你可以做这样的:

// $rootDir/gradle/common.gradle.kts
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
tasks.withType<KotlinCompile> {
  kotlinOptions.jvmTarget = "1.8"
}

而在主脚本:

// $rootDir/build.gradle.kts
subprojects {
  apply {
    plugin(KotlinPlatformJvmPlugin::class)
    from("common.gradle.kts")
  }
}

我怎样才能把所有公用常数(如依赖版本)到单独的文件中只是使用类似springBootVersion或Constants.springBootVersion编译时检查,包括他们?

有没有好的办法做到这一点现在。您可以使用额外的属性,但它并不能保证编译时检查。类似的东西:

// $rootDir/dependencies.gradle.kts

// this will try to take configuration from existing ones
val compile by configurations
val api by configurations
dependencies {
  compile("commons-io:commons-io:1.2.3")
  api("some.dep")
}

// This will put your version into extra extension
extra["springBootVersion"] = "1.2.3"

你可以使用它像这样:

// $rootDir/build.gradle.kts
subprojects {
  apply {
    plugin<JavaLibraryPlugin>()
    from("$rootDir/dependencies.gradle.kts")
  }

而你的模块中:

// $rootDir/module/build.gradle.kts
// This will take existing dependency from extra
val springBootVersion: String by extra
dependencies {
  compile("org.spring:boot:$springBootVersion")
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章