我正在使用 Kotlin DSL 和 Gradle 构建工具。从命令行运行时,我的 gradle 构建在本地和 jenkins 服务器上运行良好。
然而,IDEA 抱怨并将几个项目标记为红色,并显示以下错误:
我在项目设置中尝试了所有 3 个选项: - 使用默认的 gradle 包装器 - 使用 gradle 'wrapper' 任务配置 - 使用本地 gradle 分发
结果如果完全相同
问题:配置有问题,或者是否有修复或解决方法?
IntelliJ IDEA 2018.1.2 (Community Edition)
Build #IC-181.4668.68, built on April 24, 2018
JRE: 1.8.0_152-release-1136-b29 amd64
JVM: OpenJDK 64-Bit Server VM by JetBrains s.r.o
Linux 4.15.0-20-generic
Run Code Online (Sandbox Code Playgroud)
.
Kotlin plugin: 1.2.41-release-IJ2018.1-1
Run Code Online (Sandbox Code Playgroud)
.
Gradle 4.7
------------------------------------------------------------
Build time: 2018-04-18 09:09:12 UTC Revision: b9a962bf70638332300e7f810689cb2febbd4a6c
Groovy: 2.4.12 Ant: Apache Ant(TM) version 1.9.9 …Run Code Online (Sandbox Code Playgroud) 我想在 Travis 构建完成后自动将我的 Jacoco 测试报告上传到 Coveralls。它适用于 Java,但如何为 Kotlin 配置它?
错误信息
我可以在本地和 Travis 上生成 Jacoco 测试报告,但是当 Travis 尝试提交给工作服时,它会失败并显示消息
> Task :coveralls
No source file found on the project: "kotlin-template-project"
With coverage file: /home/travis/build/myname/myreponame/build/reports/jacoco/test/jacocoTestReport.xml
Run Code Online (Sandbox Code Playgroud)
Google 将我链接到 Gradle 插件实现,它显示了它在哪里抛出此消息,它告诉我(我认为)找到了 Jacoco 报告文件,但没有找到工作人员显然需要的源文件。
我试过的
因此,我尝试通过所有这些方式将工作服任务指向我的源文件:
coveralls {
sourceDirs += allprojects.sourceSets.main.allSource.srcDirs.flatten()
sourceDirs += files(sourceSets.main.kotlin.srcDirs).files.absolutePath
project.extensions.coveralls.sourceDirs += project.sourceSets.main.kotlin.srcDirs
sourceDirs += ['src/main/kotlin']
jacocoReportPath = 'build/reports/jacoco/test/jacocoTestReport.xml'
sourceDirs += ['src/test/kotlin']
sourceDirs += ["${projectDir}/src/main/kotlin"]
}
Run Code Online (Sandbox Code Playgroud)
我也尝试添加sourceSets project.sourceSets.main到jacocoTestReport任务中。
项目设置
我的最小build.gradle文件:
plugins {
id 'org.jetbrains.kotlin.jvm' …Run Code Online (Sandbox Code Playgroud) 我正在尝试将我的 android 项目迁移到使用 gradle kotlin dsl,用 build.gradle.kts 文件替换所有 build.gradle 文件并在那里使用 kotlin。之前,我曾经有一个 kotlin 文件,其中包含带有库和版本常量的对象元素(在 buildSrc -> src -> main -> kotlin 中),例如:
object Versions {
const val anyLibVersion = "1.0.0"
}
object Lib {
const val anyLib = "x:y:${Versions.anyLibVersion}"
}
Run Code Online (Sandbox Code Playgroud)
在 build.gradle 文件中,我可以毫无问题地访问这些常量,但是一旦我将它们切换到 build.gradle.kts,它就无法再解析它们。对此有什么解释吗?
我正在尝试使用 kotlin-dsl 配置我的 gradle 设置。我的项目 gradle 是这样的:
buildscript {
repositories {
google()
jcenter()
}
dependencies {
classpath("com.android.tools.build:gradle:3.3.2")
classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.3.21")
}
}
allprojects {
repositories {
google()
jcenter()
}
}
Run Code Online (Sandbox Code Playgroud)
和我的应用程序级gradle:
plugins {
id("com.android.application")
id("kotlin-android")
}
android { // marked red
}
Run Code Online (Sandbox Code Playgroud)
两个文件名都是 build.gradle.kts。Gradle 版本是 5.2.1。我遇到的问题是 IDE 无法识别 app-gradle 文件中的 android {} 部分,我无法配置 compileSdkVersion 等内容。我又一次尝试将项目迁移到 kotlin-dsl再一次,只有失败和沮丧。不知道为什么这永远行不通,总是让我保持旧的方式。我做错了什么,为什么不起作用?
迁移到 gradle kotlin dsl 并且自从从 android studio 运行项目以来无法生成构建文件夹和 apk。构建成功但安装失败并显示以下消息:
The APK file /Users/user/AndroidStudioProjects/project/app/build/outputs/apk/Stage/debug/stage-debug.apk does not exist on disk.
Error while Installing APK
Run Code Online (Sandbox Code Playgroud)
根本没有生成此构建文件夹。在迁移到 gradle kotlin dsl 之前,将从 build/intermediates/.....splitapk.apk 中选取 apk
我正在使用 android studio 3.4 RC3
我的gradle.properties.kts文件有以下内容:
build_version=develop
build_version_code=2
include_vas=false
Run Code Online (Sandbox Code Playgroud)
在我的build.gradle.kts中如下所示:
plugins {
id(Plugins.androidApplication)
kotlin(Plugins.kotlinAndroid)
kotlin(Plugins.kotlinExtensions)
kotlin(Plugins.kapt)
}
android {
compileSdkVersion(Configs.compileVersion)
defaultConfig {
applicationId = Configs.applicationId
minSdkVersion(Configs.minSdkVersion)
targetSdkVersion(Configs.targetSdkVersion)
testInstrumentationRunner = Configs.testInstrumentationRunner
versionCode =
}
buildTypes{
}
repositories {
flatDir {
dirs("libs")
}
}
dependencies {
implementation(fileTree(mapOf("dir" to "libs", "include" to listOf("*.jar", "*.arr"))))
implementation(Libs.stdLib)
implementation(Libs.sunmiui)
implementation(Libs.slf4j)
implementation(Libs.appCompact)
implementation(Libs.otpView)
implementation(Libs.vectordrawableAnimated)
implementation(Libs.materialComponents)
implementation(Libs.recyclerView)
implementation(Libs.constraintLayout)
implementation(Libs.junit)
implementation(Libs.testRunner)
implementation(Libs.expressoCore)
implementation(Libs.lifecyleExtensions)
implementation(Libs.lifecyleCompiler)
implementation(Libs.roomRuntime)
implementation(Libs.databindingCompiler)
implementation(Libs.rxjava)
implementation(Libs.rxjavaAndroid)
implementation(Libs.glide)
implementation(Libs.glideCompiler)
implementation(Libs.gson)
implementation(Libs.joda)
implementation(Libs.countrycodePicker)
implementation(Libs.timber)
implementation(Libs.daggerandroidSupport)
implementation(Libs.daggerandroidProcessor)
}
Run Code Online (Sandbox Code Playgroud)
我正在将我当前的 gradle 脚本转换为 …
使用 gradle 多模块项目时,是否可以在父项目中定义函数但在子模块 build.gradle.kts 中使用它们?
请注意,我不需要使用字符串注册和调用的无类型任务......我希望将实际的类型安全代码共享给子模块。
理想情况下不创建插件或使用 buildSrc。
从父级 build.gradle.kts 到所有子模块共享类的最重要方式是什么?
注意:这与通过 ext 共享闭包不同......你失去了类型安全,我要求的是子模块方面的类型安全。
为了区分不同的插件配置,我使用单独的文件。
例如:
./build.gradle.kts
./detekt.gradle.kts
./settings.gradle.kts
./module1
./module2
...
在根中,build.gradle.kts我有这个:
plugins {
id("io.gitlab.arturbosch.detekt") version DependencyVersion.Detekt
}
buildscript {
dependencies {
classpath(io.gitlab.arturbosch.detekt:detekt-gradle-plugin:1.1.1)
}
}
Run Code Online (Sandbox Code Playgroud)
并配置它我去detekt.gradle.kts并把:
apply(plugin = "io.gitlab.arturbosch.detekt")
detekt {
// configure
}
Run Code Online (Sandbox Code Playgroud)
但是detekt找不到 lambda。还尝试过:
apply(plugin = "io.gitlab.arturbosch.detekt")
configure<io.gitlab.arturbosch.detekt.Detekt> {
// configure
}
Run Code Online (Sandbox Code Playgroud)
但它没有找到.Detekt。
使用 JaCoCo,我使用第二种方法没有任何问题,但它不适用于 Detekt 或 SonarQube。
如何在单独的文件中配置插件?
谢谢。
使用 Gradle 版本目录声明依赖项时,必须将依赖项分类器放在哪里?例如io.netty:netty-transport-native-epoll:4.1.74.Final:linux-x86_64
使用普通实现函数:
implementation("io.netty:netty-transport-native-epoll:4.1.74.Final:linux-x86_64")
Run Code Online (Sandbox Code Playgroud)
它可以工作,但是如何使用目录执行相同的操作:
netty-epoll-linux = { group = "io.netty", name = "netty-transport-native-epoll", version = "4.1.74.Final", ????? classifier="linux-x86_64" - doesn't work }
Run Code Online (Sandbox Code Playgroud) 我已经将我的 android studio 版本升级到
Android Studio Iguana | 2023.2.1 Canary 6
Build #AI-232.9921.47.2321.10875067, built on September 28, 2023
Runtime version: 17.0.8+0-17.0.8b1000.22-10799086 x86_64
VM: OpenJDK 64-Bit Server VM by JetBrains s.r.o.
macOS 12.6.1
GC: G1 Young Generation, G1 Old Generation
Memory: 5120M
Cores: 12
Metal Rendering is ON
Registry:
external.system.auto.import.disabled=true
debugger.new.tool.window.layout=true
ide.text.editor.with.preview.show.floating.toolbar=false
ide.instant.shutdown=false
ide.experimental.ui=true
ide.images.show.chessboard=true
Non-Bundled Plugins:
com.github.rmehri01.onenord (0.0.7)
com.arcticicestudio.nord.jetbrains (0.13.0)
Run Code Online (Sandbox Code Playgroud)
和 AGP 版本8.3.0-alpha06
现在我的构建在这两行上失败了
import com.android.build.gradle.internal.cxx.configure.gradleLocalProperties
val googleApiKey: String = gradleLocalProperties(rootDir).getProperty("GOOGLE_API_KEY")
val googleCrashReportingApiKey: String = gradleLocalProperties(rootDir).getProperty("GOOGLE_CRASH_REPORTING_API_KEY")
* What went …Run Code Online (Sandbox Code Playgroud)