这是针对 JVM 应用程序的。
我正在创建一个属性文件,其中包含要在应用程序运行时使用的版本。我在基础项目中编写了这个任务build.gradle.kts
:
allprojects {
//...
tasks.register("createVersionPropertiesFile") {
group = "build"
doLast {
val resourcesDir = File("$buildDir/resources/main").apply { mkdirs() }
val resource = File(resourcesDir, "version.properties")
resource.writeText("version=${project.version}")
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果我独立运行此任务,它会按我的预期创建文件。
为了在构建期间运行任务,我将其放入应用程序模块中build.gradle.kts
:
tasks.processResources {
dependsOn += tasks["createVersionPropertiesFile"]
}
Run Code Online (Sandbox Code Playgroud)
然而,在构建过程中,资源目录实际上被删除而不是创建(或者如果是的话,它会在构建完成之前再次被删除)。因此,应用程序运行时找不到资源。
如何设置此任务在构建过程的适当阶段运行?
我知道另一种策略是在源代码的实际资源目录中创建资源文件,但我不想用这个自动生成的文件弄脏签入的源代码。我希望它只是构建的一部分。
我有一个包含可变值的 Kotlin 类。
class StringWrapper(
var value: String = ""
) {
override fun toString(): String = value
}
Run Code Online (Sandbox Code Playgroud)
我使用这个包装器作为自定义数据持有者类中的属性
class DataHolder {
val name = StringWrapper()
override fun toString(): String = "Data(name=$name)"
}
Run Code Online (Sandbox Code Playgroud)
我想让它更容易地为内容赋值StringWrapper
val dataAlpha = DataHolder()
// the '.value' is unnecessary noise
dataAlpha.name.value = "alpha"
// I want to directly assign a string value, but I get an error
dataAlpha.name = "alpha" // ERROR Type mismatch.
// Required: StringWrapper
// Found: String
Run Code Online (Sandbox Code Playgroud)
我还想让复制一个StringWrapper
到另一个变得更容易。
val …
Run Code Online (Sandbox Code Playgroud) operator-overloading assignment-operator kotlin gradle-kotlin-dsl
我正在使用最新的kts构建工具来学习Android hilt,并且我已经按照官方教程引入了依赖项,但是kapt似乎存在一些问题:
这是项目的根级别build.gradle.kts
plugins {
id("com.android.application") version "8.2.0-alpha04" apply false
id("com.android.library") version "8.0.0" apply false
id("org.jetbrains.kotlin.android") version "1.8.20" apply false
id("com.google.dagger.hilt.android") version "2.44" apply false
}
Run Code Online (Sandbox Code Playgroud)
这是项目的app build.gradle.kts
import org.jetbrains.kotlin.kapt3.base.Kapt.kapt
plugins {
id("com.android.application")
kotlin("kapt")
id("com.google.dagger.hilt.android")
}
android {
namespace = "com.example.myapplication"
compileSdk = 33
defaultConfig {
applicationId = "com.example.myapplication"
minSdk = 29
targetSdk = 33
versionCode = 1
versionName = "1.0"
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
isMinifyEnabled = false
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
)
}
}
compileOptions { …
Run Code Online (Sandbox Code Playgroud) 到处导入SDK后项目停止构建import androidx.compose.ui.draw.alpha
33,显示依赖冲突
错误日志:
An issue was found when checking AAR metadata:
1. Dependency 'androidx.emoji2:emoji2:1.4.0' requires libraries and applications that
depend on it to compile against version 34 or later of the
Android APIs.
:app is currently compiled against android-33.
Recommended action: Update this project to use a newer compileSdk
of at least 34, for example 34.
Note that updating a library or application's compileSdk (which
allows newer APIs to be used) can be done separately from updating
targetSdk …
Run Code Online (Sandbox Code Playgroud) SpringBoot 带有许多依赖项以及它们的默认版本。在 groovy-gradle 中,这样的依赖版本可以被覆盖:
ext['mockito.version'] = '1.7.5'
Run Code Online (Sandbox Code Playgroud)
但这对 kotlin-dsl 不起作用。我试过:
val mockito by extra { "2.12.0" }
val mockito.version by extra { "2.12.0" }
val `mockito.version` by extra { "2.12.0" }
Run Code Online (Sandbox Code Playgroud)
后两个,不要编译,第一个,不起作用。
如何在 kotlin 文件中覆盖版本(如果可能的话,我不想创建单独的属性文件)。
如何使用kotlin-dsl在gradle 任务中下载文件?
我想从外部源 (URL) 下载文件并将其存储 + 重命名到我的项目文件夹中。
我试图搜索它,但我只找到了 groovy 解决方案。
提前致谢!
我已阅读codecov/example-gradle,但不确定如何将其转换为 Kotlin DSL。
我的.travis.yml
:
language: java
jdk:
- openjdk11
before_install:
- chmod +x gradlew
- chmod +x gradle/wrapper/gradle-wrapper.jar
script:
- ./gradlew test
- ./gradlew codeCoverageReport
after_success:
- bash <(curl -s https://codecov.io/bash)
Run Code Online (Sandbox Code Playgroud)
我的build.gradle.kts
:
import org.jetbrains.kotlin.gradle.plugin.KotlinPluginWrapper
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
plugins {
kotlin("jvm") version "1.2.71"
jacoco
maven
}
repositories {
mavenCentral()
}
dependencies {
testImplementation("org.junit.jupiter:junit-jupiter-engine:5.3.1")
}
tasks {
"test"(Test::class) {
useJUnitPlatform()
}
// Task with name 'codeCoverageReport' not found in root project ''.
"codeCoverageReport"(JacocoReport::class) {
executionData(fileTree(project.rootDir.absolutePath).include("**/build/jacoco/*.exec"))
subprojects.onEach { …
Run Code Online (Sandbox Code Playgroud) android.applicationVariants.all { variant ->
variant.outputs.each { output ->
int newVersionCode = android.defaultConfig.versionCode * 10 + abiVersionCodes.get(output.getFilter(com.android.build.OutputFile.ABI), 0)
output.versionCodeOverride = newVersionCode
}
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试将此Gradle Groovy DSL代码转换为新的Gradle Kotlin DSL。我希望代码正常运行,就像以前的APK拆分变体遵循我的versionCode模式一样
这就是我试图用Kotlin DSL编写的内容:
applicationVariants.all(object : Action<ApplicationVariant> {
override fun execute(variant: ApplicationVariant) {
variant.outputs.forEach {output ->
val newVersionCode = defaultConfig.versionCode ?: 0 * 10 + abiVersionCodes[output.filters.first { it.identifier == com.android.build.OutputFile.ABI }]
output.versionCodeOverride = newVersionCode
}
}
})
Run Code Online (Sandbox Code Playgroud)
但它说:“未解决的参考:versionCodeOverride”
使用Kotlin DSL的正确方法是什么?
我kotlin application
通过gradle init --dsl kotlin
-> 将项目加载到intellij 中生成了一个骨架,并收到以下错误。附上截图。
Type mismatch : inferred type is kotlin.String but java.lang.String was expected.
我已经尝试了使缓存/重启无效的各种步骤。删除 .gradle、.idea、~/.gradle 等,刷新 gradle 项目,停止 gradle 守护进程。刷新 Intellij 项目(删除 ~/.intellijIDea../system 目录)。然而,没有一个有帮助。请告诉我我还能做什么?
正如我所说,我通过gradle init --dsl kotlin
. gradle 版本 5.2.1,kotlin 插件版本 1.3.20。都是最新的。intellij idea 是 2018.3 版本。对于初学者,build.gradle.kts
如下所示:
plugins {
// Apply the Kotlin JVM plugin to add support for Kotlin on the JVM.
id("org.jetbrains.kotlin.jvm").version("1.3.20")
// Apply the application plugin to add support for building a CLI application. …
Run Code Online (Sandbox Code Playgroud) 我正在尝试从 groovy 迁移到 gradle-kotlin dsl,但我是新手,所以我不知道如何配置 Jfrog Artifactory。请帮助我将该部分代码转换为 gradle-kotlin dsl:
task sourceJar(type: Jar) {
from sourceSets.main.allJava
}
artifactory {
contextUrl = "http://10.0.0.49:8081/artifactory"
publish {
repository {
repoKey = 'gradle-dev-local'
username = artifactory_username
password = artifactory_password
}
defaults {
publications('mavenJava')
publishArtifacts = true
publishPom = true
}
}
}
publishing {
publications {
mavenJava(MavenPublication) {
groupId = "ua.tiras.oloader"
artifactId = 'core'
version = "1.0.62"
artifact("$buildDir/libs/${project.getName()}.jar")
artifact sourceJar {
classifier "sources"
}
pom.withXml {
def dependenciesNode = asNode().appendNode('dependencies')
configurations.api.allDependencies.each { dependency ->
def …
Run Code Online (Sandbox Code Playgroud) gradle ×8
kotlin ×6
android ×3
artifactory ×1
codecov ×1
dagger-hilt ×1
groovydsl ×1
jvm ×1
kapt ×1