Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
562 views
in Technique[技术] by (71.8m points)

Gradle打成Jar包,提示找不到主类

最近写了一个小的玩具程序想放到树莓派上跑跑,程序用Kotlin写的,但是打成Jar包的时候提示找不到主类,求助,应该怎么解决呢?jar包中是找的到这个主类的
image.png
image.png

以下为主类

object RobotClient {

    private val logger = LoggerFactory.getLogger(this.javaClass)

    private const val url = "192.168.10.140"
    private const val port = 9760

    @Throws(InterruptedException::class)
    fun client() {
        val group = NioEventLoopGroup()
        val bootstrap = Bootstrap()
        try {
            bootstrap.group(group)
                    .channel(NioSocketChannel::class.java)
                    .option(ChannelOption.SO_KEEPALIVE, true)
//                    .option(ChannelOption.SO_BACKLOG, 1024)
                    .handler(RobotClientInitializer())

            val channelFuture = bootstrap.connect(url, port).sync()

            channelFuture.channel().closeFuture().sync()
        } finally {
            group.shutdownGracefully()
        }
    }

    @JvmStatic
    fun main(args: Array<String>) {
        client()
    }

}

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

自己解决了,不要用gradle的jar,而用另一个插件进行打包:

plugins {
    id 'java'
    id 'application'
    id 'org.jetbrains.kotlin.jvm' version '1.3.72'
    id "org.jetbrains.kotlin.kapt" version "1.3.72"
    // 就是这个插件
    id "com.github.johnrengelman.shadow" version "5.2.0"
}

group 'com.dennis'
version '1.0-SNAPSHOT'

repositories {
    mavenLocal()
    mavenCentral()
}

application {
    mainClassName = 'com.dennis.RobotClientKt'
}

//禁掉jar task
jar.enabled = false
shadowJar {
    baseName = 'robot'
    //classifier是生成jar包的后缀
    classifier = null
    version = '1.0.0'
    manifest {
        // 它指定的mainclass就找得到,奇怪
        attributes 'Main-Class': 'com.dennis.RobotClientKt'
    }
}

assemble.dependsOn(shadowJar)

dependencies {
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8"
    testCompile group: 'junit', name: 'junit', version: '4.12'
    compile group: 'io.netty', name: 'netty-all', version: '4.1.42.Final'
    compile group: 'org.eclipse.milo', name: 'sdk-client', version: '0.4.1'
    compile group: 'org.eclipse.milo', name: 'sdk-server', version: '0.4.1'
    compile group: 'org.eclipse.milo', name: 'sdk-core', version: '0.4.1'
    compile group: 'org.jetbrains.kotlin', name: 'kotlin-stdlib-jdk8', version: '1.3.72'
    compile group: 'org.jetbrains.kotlin', name: 'kotlin-reflect', version: '1.3.72'
    compile group: 'org.jetbrains.kotlinx', name: 'kotlinx-coroutines-core', version: '1.3.5'
    compile group: 'com.google.code.gson', name: 'gson', version: '2.8.6'
    compile group: 'log4j', name: 'log4j', version: '1.2.17'
    compile group: 'org.slf4j', name: 'slf4j-log4j12', version: '1.7.30'
}

compileKotlin {
    kotlinOptions.jvmTarget = "1.8"
}

compileTestKotlin {
    kotlinOptions.jvmTarget = "1.8"
}

tasks.withType(JavaCompile) {
    options.encoding = "UTF-8"
}

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...