Kotlin+Gradle-错误:无法找到或加载主类



我正试图用Kotlin创建一个控制台应用程序,所以当尝试运行jar时,它会返回消息"无法找到或加载主类";。当我通过IntelliJ运行它时,它会正常运行,但当我尝试通过命令行java -jar C:wavecounterbinwavecounter_service.jar运行它时会出现错误。

WaveCounterService.kt

package br.com.mawan.waveCounterService
fun main(args: Array<String>) {
println("Hello world!!")
}

build.gradle

plugins {
id 'java'
id 'org.jetbrains.kotlin.jvm' version '1.3.72'
}
group = "br.com.mawan.waveCounterService"
version = "1.0.0"
ext {
dir_install = "c:\wavecounter"
}
repositories {
mavenCentral()
jcenter()
maven { setUrl("https://dl.bintray.com/kotlin/exposed") }
}
dependencies {
implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.3.72")
implementation("org.jetbrains.kotlin:kotlin-reflect:1.3.72")
implementation("org.jetbrains.exposed:exposed:0.10.4")
implementation("org.slf4j:slf4j-api:1.7.26")
implementation("ch.qos.logback:logback-classic:1.2.3")
implementation("ch.qos.logback:logback-core:1.2.3")
implementation("com.google.code.gson:gson:2.8.5")
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.5")
implementation("com.microsoft.sqlserver:mssql-jdbc:9.4.1.jre8")
implementation("mysql:mysql-connector-java:8.0.18")
implementation("net.sourceforge.jtds:jtds:1.3.1")
}
compileKotlin {
kotlinOptions.jvmTarget = "1.8"
}
task backup_file_config(type: Copy) {
from "${dir_install}\config\config_service.json"
into "src/main/resources/"
}
task copy_files_bin(type: Copy) {
from "${buildDir}\libs\wavecounter_service-${version}.jar"
into "${dir_install}\bin"
rename ("wavecounter_service-${version}.jar", "wavecounter_service.jar")
}
task waveCounterServiceJar(type: Jar) {
duplicatesStrategy = DuplicatesStrategy.INCLUDE
manifest {
attributes 'Implementation-Title': 'WaveCounterService',
'Main-Class': 'br.com.mawan.waveCounterService.WaveCounterServiceKt'
}
archivesBaseName = "wavecounter_service"
configurations.implementation.setCanBeResolved(true)
from {
exclude '**/module-info.class'
configurations.implementation.collect { it.isDirectory() ? it : zipTree(it) }
}
with jar
doFirst {
mkdir "${dir_install}\backup\mysql"
}
finalizedBy(copy_files_bin, backup_file_config)
}

我解决了这个问题,但我无法解释为什么它有效。如果有人知道我会花一个解释。我在看一个老项目,在它的渐变中有一个命令">排除‘META-INF/.RSA’*’;。我把这个命令放在jar创建任务中,它就工作了。

task waveCounterServiceJar(type: Jar) {
exclude 'META-INF/*.RSA'
duplicatesStrategy = DuplicatesStrategy.INCLUDE
manifest {
attributes 'Implementation-Title': 'WaveCounterService',
'Main-Class': 'br.com.mawan.waveCounterService.WaveCounterServiceKt'
}
archivesBaseName = "wavecounter_service"
configurations.implementation.setCanBeResolved(true)
from {
exclude '**/module-info.class'
configurations.implementation.collect { it.isDirectory() ? it : zipTree(it) }
}
with jar
doFirst {
mkdir "${dir_install}\backup\mysql"
}
finalizedBy(copy_files_bin, backup_file_config)
}

最新更新