Java 尝试在IntelliJ IDEA中创建jar可执行文件

Java 尝试在IntelliJ IDEA中创建jar可执行文件,java,intellij-idea,javafx,kotlin,tornadofx,Java,Intellij Idea,Javafx,Kotlin,Tornadofx,我正试图为tornadofx项目构建一个jar文件 当我在my.kt中运行main函数时,它正常运行 (seri/src/main/kotlin/my.kt) 运行windows 10、intelli IDEA 2019.1.1 我在项目结构中创建了一个jar工件,并从build菜单中创建了“build artifacts”,它创建了一个jar文件,但没有运行,显示错误“错误:找不到或加载主类com.searent.MyApp 原因:java.lang.NoClassDefFoundError:

我正试图为tornadofx项目构建一个jar文件

当我在my.kt中运行main函数时,它正常运行 (seri/src/main/kotlin/my.kt)

运行windows 10、intelli IDEA 2019.1.1 我在项目结构中创建了一个jar工件,并从build菜单中创建了“build artifacts”,它创建了一个jar文件,但没有运行,显示错误“错误:找不到或加载主类com.searent.MyApp 原因:java.lang.NoClassDefFoundError:tornadofx/App

不确定这是否是最佳解决方案,但您可以使用gradle的shadow插件。它允许轻松创建fat/uber罐。您只需稍微修改build.gradle文件:

plugins {
    id "application"
    id "org.jetbrains.kotlin.jvm" version "1.3.11"
    id "com.github.johnrengelman.shadow" version "4.0.2" // 5.0.0 for gradle 5.0+
}

mainClassName = "com.serious.MyKt"

repositories {
    mavenLocal()
    mavenCentral()
    maven {
        url "https://oss.sonatype.org/content/repositories/snapshots/"
    }
}

ext {
    tornadofx_version = "1.7.18"
    junit_version = "5.4.0"
}

dependencies {
    implementation "org.jetbrains.kotlin:kotlin-stdlib"
    implementation "no.tornado:tornadofx:$tornadofx_version"
    testImplementation "org.junit.jupiter:junit-jupiter:$junit_version"
}

compileKotlin {
    kotlinOptions.jvmTarget = "1.8"
}

test {
    useJUnitPlatform()
}
然后运行一个名为“shadowJar”的任务。Fat jar将被放入
/build/libs/

buildscript {
    ext.kotlin_version = "1.2.60"
    ext.tornadofx_version = "1.7.17"
    ext.junit_version = "5.1.0"

    repositories {
        mavenLocal()
        mavenCentral()
    }
    dependencies {
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
        classpath "org.junit.platform:junit-platform-gradle-plugin:1.1.0"
    }
}

plugins {
    id 'java'
    id 'org.jetbrains.kotlin.jvm' version '1.3.31'
    id 'org.openjfx.javafxplugin' version '0.0.7'

}

version '1.0-SNAPSHOT'

sourceCompatibility = 1.8

repositories {
    mavenLocal()
    mavenCentral()
}

dependencies {
    compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"

    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8"
    testCompile group: 'junit', name: 'junit', version: '4.12'
    compile 'no.tornado:tornadofx:1.7.18'

}

compileKotlin {
    kotlinOptions.jvmTarget = "1.8"
}
compileTestKotlin {
    kotlinOptions.jvmTarget = "1.8"
}

javafx {
    version = "12.0.1"
    modules = ['javafx.controls']
}
plugins {
    id "application"
    id "org.jetbrains.kotlin.jvm" version "1.3.11"
    id "com.github.johnrengelman.shadow" version "4.0.2" // 5.0.0 for gradle 5.0+
}

mainClassName = "com.serious.MyKt"

repositories {
    mavenLocal()
    mavenCentral()
    maven {
        url "https://oss.sonatype.org/content/repositories/snapshots/"
    }
}

ext {
    tornadofx_version = "1.7.18"
    junit_version = "5.4.0"
}

dependencies {
    implementation "org.jetbrains.kotlin:kotlin-stdlib"
    implementation "no.tornado:tornadofx:$tornadofx_version"
    testImplementation "org.junit.jupiter:junit-jupiter:$junit_version"
}

compileKotlin {
    kotlinOptions.jvmTarget = "1.8"
}

test {
    useJUnitPlatform()
}