我使用以下代码:
java.sourceSets["main"].java {
srcDir("src/main/extraSource")
}
Run Code Online (Sandbox Code Playgroud)
在gradle 4.9中完美运行,但在4.10中rc1给出以下错误:
Line 5: java.sourceSets["main"].java {
^ Unresolved reference. None of the following candidates is applicable because of receiver type mismatch:
public val Project.sourceSets: SourceSetContainer defined in org.gradle.kotlin.dsl
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?是否需要改变?许多其他答案(例如 ,此问题的这一个和每个建议的答案)如果已经改变,也将需要更新
我创建了一个versions.gradle.kts像这样的:
object Defines {
const val kotlinVersion = "1.2.61"
const val junitVersion = "5.3.0"
}
Run Code Online (Sandbox Code Playgroud)
现在,我要像这样导入和使用这些文件:
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
group = "io.github.deglans"
version = "0.0.1-SNAPSHOT"
plugins {
application
kotlin("jvm") version Defines.kotlinVersion
}
application {
mainClassName = "io.github.deglans.polishnotation.MainKt"
}
dependencies {
compile(kotlin("stdlib-jdk8"))
testCompile("org.junit.jupiter", "junit-jupiter-api", Defines.junitVersion)
testRuntime("org.junit.jupiter", "junit-jupiter-engine", Defines.junitVersion)
}
tasks.withType<KotlinCompile> {
kotlinOptions.jvmTarget = "1.8"
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
注意:我已经看过这篇文章,但这并不完全是我搜索...
为了重用 gradle 文件中的代码,我通常有一个用于某些模块的“基本”gradle 文件,只需应用它们并添加它可能需要的任何新依赖项。我正在将所有 gradle 文件转换为新的 Kotlin DSL,但使用以下“基本”文件时出现关键字“未解析的引用”错误。
plugins {
id("com.android.library")
kotlin("kotlin.android")
kotlin("kapt")
}
android {
compileSdkVersion(App.compileSdk)
defaultConfig {
minSdkVersion(App.minSdk)
targetSdkVersion(App.targetSdk)
versionCode = App.versionCode
versionName = App.versionName
testInstrumentationRunner = "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
getByName("release") {
isMinifyEnabled = false
proguardFiles(getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro")
}
}
compileOptions {
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
}
}
dependencies {
val implementation by configurations
val testImplementation by configurations
val androidTestImplementation by configurations
implementation(fileTree(mapOf("dir" to "libs", "include" to listOf("*.jar"))))
implementation(Libs.kotlin_stdlib_jdk8)
implementation(Libs.appcompat_v7)
testImplementation(Libs.junit)
androidTestImplementation(Libs.com_android_support_test_runner)
androidTestImplementation(Libs.espresso_core)
}
Run Code Online (Sandbox Code Playgroud)
上面的文件在我的根项目中,我只是在功能模块中使用以下内容
apply(rootProject.file("base-android.gradle.kts")) …Run Code Online (Sandbox Code Playgroud) 当我从Intellidle IDEA中的Gradle Groovy DSL迁移到Kotlin DSL后尝试构建项目时,我收到了一个非常无法解释的错误.
Unsupported method: IdeaModuleDependency.getDependencyModule().
The version of Gradle you connect to does not support that method.
To resolve the problem you can change/upgrade the target version of Gradle you connect to.
Alternatively, you can ignore this exception and read other information from the model.
我正在使用gradle 5.0包装器,因此据我所知,更新不是一个选项.
我也使用最新版本的IntelliJ,所有插件都是最新的.
IntelliJ IDEA 2018.3(终极版)Build#IU-183.4284.148,建于2018年11月21日
我用Gradle构建的项目是一个多模块Kotlin-JVM项目.
我已经将我们的Android项目之一从旧的Groovy settings.gradle和build.gradle文件转换为新的Kotlin DSL,即settings.gradle.kts和build.gradle.kts。
尽管“它可以在我的机器上工作”,尤其是:我从Groovy转换为Kotlin的原始项目在其原始目录中运行良好,但所有我的同事在克隆存储库时都无法打开该项目。重要的是,将存储库克隆到其他目录时,我也无法自己打开项目(在同一台计算机上使用相同的AS安装)。因此,我怀疑某些配置文件中缺少一些其他详细信息,但我似乎无法弄清楚哪个...
细节:
File > Open...然后选择项目文件夹时,我只会收到错误消息“项目'xxx'不是基于Gradle的项目”Import Project (Gradle, Eclipse ADT, etc.)然后选择时Import project from external model,Android GradleAndroid Studio将创建一个空build.gradle文件并失败,并显示错误消息“错误:未找到ID为'com.android.library'的插件。” 删除build.gradle正义返回到我在第一个项目符号要点中描述的错误消息。我知道这个Github问题,似乎描述了同样的问题,但是它一直很安静,我想这附近的某人一定想出了解决这个问题的方法...
哦,命令行构建在任何地方都可以工作-这纯粹是一个Android Studio问题。
更新:当我将整个项目复制到一个新文件夹(而不是克隆存储库)时,我可以毫无问题地打开它。因此,我是否假设文件夹内必须有东西(但在Git中没有)是正确的呢?
gradle android-studio android-gradle-plugin gradle-kotlin-dsl
在build.gradle.kts文件中,我将此代码包含在顶行。然后我使用下面的 KotlinCompilerVesion.VERSION 。
import org.jetbrains.kotlin.config.KotlinCompilerVersion
Run Code Online (Sandbox Code Playgroud)
有些代码工作正常,但有些代码失败:
似乎只有plugins块无法启用此功能import。
这里工作正常:
dependencies {
Implementation(kotlin("stdlib-jdk7", KotlinCompilerVersion.VERSION))
Implementation(kotlin("test", KotlinCompilerVersion.VERSION))
}
Run Code Online (Sandbox Code Playgroud)
这里总是出错:
plugins {
id("com.android.application")
kotlin("android")
kotlin("android.extensions")
/*
* Error: Unresolved reference: KotlinCompilerVersion
*/
id("kotlinx-serialization") version KotlinCompilerVersion.VERSION
/*
* Error: Unresolved reference: KotlinCompilerVersion
*/
id("kotlinx-serialization") version "$KotlinCompilerVersion.VERSION"
/*
* Error: Unresolved reference: KotlinCompilerVersion
*/
id("kotlinx-serialization") version "${KotlinCompilerVersion.VERSION}"
}
Run Code Online (Sandbox Code Playgroud)
如何在不声明ext.xxxVersionvar 的情况下在这里正确使用它?
这基本上将这个问题扩展到 Kotlin DSL 而不是 Groovy DSL:
如何在Groovy的DSL解决方案的
if (hasProperty('buildScan')) {
buildScan {
termsOfServiceUrl = 'https://gradle.com/terms-of-service'
termsOfServiceAgree = 'yes'
}
}
Run Code Online (Sandbox Code Playgroud)
转换为 Kotlin DSL?
我正在运行的问题是“buildScan”扩展或com.gradle.scan.plugin.BuildScanExtension类不能静态使用,因为它们存在或不存在取决于--scan命令行参数是否提供给 Gradle。
我试过了
if (hasProperty("buildScan")) {
extensions.configure("buildScan") {
termsOfServiceUrl = "https://gradle.com/terms-of-service"
termsOfServiceAgree = "yes"
}
}
Run Code Online (Sandbox Code Playgroud)
但正如预期的那样termsOfServiceUrl并termsOfServiceAgree没有解决,但是我不知道在这里使用什么语法。
如何通过 gradle 添加 javafx 依赖项?
thufir@dur:~/NetBeansProjects/helloWorldJavaFX$
thufir@dur:~/NetBeansProjects/helloWorldJavaFX$ gradle clean
> Configure project :
e: /home/thufir/NetBeansProjects/helloWorldJavaFX/build.gradle.kts:13:7: Unresolved reference: openjfx
FAILURE: Build failed with an exception.
* Where:
Build file '/home/thufir/NetBeansProjects/helloWorldJavaFX/build.gradle.kts' line: 13
* What went wrong:
Script compilation error:
Line 13: org.openjfx.javafxplugin
^ Unresolved reference: openjfx
1 error
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
* Get more help …Run Code Online (Sandbox Code Playgroud) 我想检查是否设置了两个项目属性,如果没有,将它们设置为空值以避免构建失败。这些属性应该来自~/.gradle/gradle.properties(如果已配置)。
目标是拥有在该本地文件中定义的 S3 中 Maven 存储库的凭据。每个用户都必须将自己的数据放在那里,但我希望构建仅输出警告并在未设置时继续。即使不联系 S3,它仍然会成功的可能性很高。
我已经使用 Groovy DSL 运行它,但我现在正在切换到 Kotlin,但我无法正确使用语法。
这是~/.gradle/gradle.properties这样的:
s3AccessKeyId=ABCDEFGHIJKLMNOPQRST
s3SecretKey=abcdefghijklmnopqrstuvwxyz1234567890abcd
Run Code Online (Sandbox Code Playgroud)
这里是相关的部分 build.gradle.kts
s3AccessKeyId=ABCDEFGHIJKLMNOPQRST
s3SecretKey=abcdefghijklmnopqrstuvwxyz1234567890abcd
Run Code Online (Sandbox Code Playgroud)
无论我如何编写s3AccessKeyId=""行,我总是收到错误消息:
无法在额外的属性扩展中获取属性“s3AccessKeyId”,因为它不存在
如果在本地 Maven 存储库中找到所有工件,我希望构建工作,即使没有gradle.properties. 只有当某些工件丢失时,构建才会中止并出现一些“凭据错误”错误。
正如我所说,它已经与 Groovy 一起工作了。
我有一个使用 Gradle 6.4 版和 JDK 8 构建的项目。我正在尝试将 Gradle插件用于测试装置( java-test-fixtures),但我在依赖项方面遇到了一些问题。
根据上面链接的 Gradle 页面,该项目的结构应如下所示:
core-module
-- src
-- main
-- java
-- test
-- java
-- testFixtures
-- java
Run Code Online (Sandbox Code Playgroud)
虽然该build.gradle.kts文件具有以下依赖项部分:
core-module
-- src
-- main
-- java
-- test
-- java
-- testFixtures
-- java
Run Code Online (Sandbox Code Playgroud)
现在,在testFixtures/java源文件夹中的 IntelliJ(我正在使用的 IDE)类中查看源文件夹中的类main/java。所以我可以在下面添加新的 Java 类testFixtures/java,这些类依赖于main. 但是,我将无法从外部库导入依赖项com.my.external.project:1.0。当我尝试运行 Gradle 任务时,问题得到确认compileTestFixturesJava。
我可以复制该dependencies部分中的条目;例如我可以添加:
dependencies {
api("com.my.external.project:1.0")
// ... more API dependencies
testFixturesCompileOnly(project(":core-module")) …Run Code Online (Sandbox Code Playgroud) java dependency-management gradle gradle-kotlin-dsl java-test-fixtures