'setter for mainClassName: String' is deprecated. Deprecated in Java
Asked Answered
D

4

45

I have a vert.x web app written in Kotlin and Gradle as the build tool. The web app has been generated with https://start.vertx.io/.

In the build.gradle.kts it shows:

enter image description here

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?

Dodwell answered 9/11, 2020 at 10:7 Comment(0)
K
66

It seems the latest way of doing this is:

application {
    mainClass.set(launcherClassName)
}
Kennel answered 9/11, 2020 at 10:34 Comment(1)
Adding this gives me a compilation error: 'fun Project.application(configure: Action<JavaApplication>): Unit' can't be called in this context by implicit receiver. Use the explicit one if necessaryCircumambient
C
11

for spring boot project

springBoot {
  mainClass.set("your.full.classname")
}
Ceballos answered 10/6, 2021 at 6:24 Comment(0)
B
7

Any of the below 3 should work:

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

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

application {
    mainClass.set('package.class')
}
Bonin answered 1/10, 2021 at 16:0 Comment(0)
M
2

Setting mainClassName on the top level should work too:

mainClassName = "io.vertx.core.Launcher"

https://github.com/AlexeySoshin/KotlinWebDevelopment/blob/20-testing-graphql-api/build.gradle#L14

Maag answered 10/11, 2020 at 11:23 Comment(1)
Your example is out of a build.gradle file not a build.gradle.kts and won't work in a Kotlin build script.Cochise

© 2022 - 2024 — McMap. All rights reserved.