0Day Forums
'setter for mainClassName: String' is deprecated. Deprecated in Java - Printable Version

+- 0Day Forums (https://0day.red)
+-- Forum: Coding (https://0day.red/Forum-Coding)
+--- Forum: Kotlin (https://0day.red/Forum-Kotlin)
+--- Thread: 'setter for mainClassName: String' is deprecated. Deprecated in Java (/Thread-39-setter-for-mainClassName-String-39-is-deprecated-Deprecated-in-Java)



'setter for mainClassName: String' is deprecated. Deprecated in Java - introvenient9347 - 07-20-2023

I have a vert.x web app written in Kotlin and Gradle as the build tool. The web app has been generated with

[To see links please register here]

.

In the `build.gradle.kts` it shows:

[![enter image description here][1]][1]

that `mainClassName` has been deprecated.

the content of the `build.gradle.kts` file:
```
import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar
import org.gradle.api.tasks.testing.logging.TestLogEvent.*
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile

plugins {
kotlin ("jvm") version "1.4.10"
application
id("com.github.johnrengelman.shadow") version "5.2.0"
id("org.flywaydb.flyway") version "7.1.1"
}

group = "io.databaker"
version = "1.0.0-SNAPSHOT"

repositories {
mavenCentral()
jcenter()
}

val kotlinVersion = "1.4.10"
val vertxVersion = "4.0.0.CR1"
val junitJupiterVersion = "5.6.0"

val mainVerticleName = "io.databaker.MainVerticle"
val watchForChange = "src/**/*"
val doOnChange = "./gradlew classes"
val launcherClassName = "io.vertx.core.Launcher"

application {
mainClassName = launcherClassName
}

dependencies {
implementation("io.vertx:vertx-auth-jwt:$vertxVersion")
implementation("io.vertx:vertx-web:$vertxVersion")
implementation("io.vertx:vertx-pg-client:$vertxVersion")
implementation("io.vertx:vertx-lang-kotlin-coroutines:$vertxVersion")
implementation("io.vertx:vertx-json-schema:$vertxVersion")
implementation("io.vertx:vertx-lang-kotlin:$vertxVersion")
implementation(kotlin("stdlib-jdk8"))
testImplementation("io.vertx:vertx-junit5:$vertxVersion")
testImplementation("org.junit.jupiter:junit-jupiter:$junitJupiterVersion")
}

val compileKotlin: KotlinCompile by tasks
compileKotlin.kotlinOptions.jvmTarget = "11"

tasks.withType<ShadowJar> {
archiveClassifier.set("fat")
manifest {
attributes(mapOf("Main-Verticle" to mainVerticleName))
}
mergeServiceFiles {
include("META-INF/services/io.vertx.core.spi.VerticleFactory")
}
}

tasks.withType<Test> {
useJUnitPlatform()
testLogging {
events = setOf(PASSED, SKIPPED, FAILED)
}
}

tasks.withType<JavaExec> {
args = listOf("run", mainVerticleName, "--redeploy=$watchForChange", "--launcher-class=$launcherClassName", "--on-redeploy=$doOnChange")
}
```
Through what should I replace the `mainClassName`?


[1]:



RE: 'setter for mainClassName: String' is deprecated. Deprecated in Java - emmersonp - 07-20-2023

It seems the latest way of doing this is:


application {
mainClass.set(launcherClassName)
}



RE: 'setter for mainClassName: String' is deprecated. Deprecated in Java - Proflashcube28 - 07-20-2023

Setting `mainClassName` on the top level should work too:

```kotlin
mainClassName = "io.vertx.core.Launcher"
```

[To see links please register here]




RE: 'setter for mainClassName: String' is deprecated. Deprecated in Java - mufinella38 - 07-20-2023

for spring boot project
```kotlin
springBoot {
mainClass.set("your.full.classname")
}
```


RE: 'setter for mainClassName: String' is deprecated. Deprecated in Java - subsidist981718 - 07-20-2023

Any of the below 3 should work:

springBoot {
mainClass.set('package.class')
}

bootJar {
mainClass.set('package.class')
}

application {
mainClass.set('package.class')
}