当前位置: 首页 > 知识库问答 >
问题:

如何使用Gradle Kotlin DSL为FatJar指定入口点Main-Class?

郭德惠
2023-03-14

导入后,如何在< code>ShadowJar中指定< code>Main-Class属性?

import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar

plugins {
    kotlin("jvm") version "1.2.51"
    id("com.github.johnrengelman.shadow") version "2.0.4"
}

group = "xxx.yyy"
version = "1.0-SNAPSHOT"

repositories {
    mavenCentral()
}

dependencies {
    implementation(kotlin("stdlib-jdk8"))
}

tasks.withType<KotlinCompile> {
    kotlinOptions.jvmTarget = "1.8"
}

tasks.withType<ShadowJar> {
    baseName = "app"
    classifier = "inajar"
    version = "9"
    //main-class = "foobar"
}

此外,此生成文件可能已过期:

thufir@dur:~/NetBeansProjects/HelloKotlinWorld$ 
thufir@dur:~/NetBeansProjects/HelloKotlinWorld$ gradle clean ShadowJar

Deprecated Gradle features were used in this build, making it incompatible with Gradle 6.0.
Use '--warning-mode all' to show the individual deprecation warnings.
See https://docs.gradle.org/5.0/userguide/command_line_interface.html#sec:command_line_warnings

BUILD SUCCESSFUL in 2s
4 actionable tasks: 4 executed
thufir@dur:~/NetBeansProjects/HelloKotlinWorld$ 
thufir@dur:~/NetBeansProjects/HelloKotlinWorld$ java -jar build/libs/app-9-inajar.jar 
no main manifest attribute, in build/libs/app-9-inajar.jar
thufir@dur:~/NetBeansProjects/HelloKotlinWorld$ 

项目:

https://github.com/THUFIR/HelloKotlinWorld

共有1个答案

滕胜涝
2023-03-14

生成文件:

import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar

plugins {
    kotlin("jvm") version "1.2.51"
    id("com.github.johnrengelman.shadow") version "2.0.4"
}

group = "xxx.yyy"
version = "1.0-SNAPSHOT"

repositories {
    mavenCentral()
}

dependencies {
    implementation(kotlin("stdlib-jdk8"))
}

tasks.withType<KotlinCompile> {
    kotlinOptions.jvmTarget = "1.8"
}

tasks.withType<ShadowJar> {

    manifest.attributes.apply {
        put("Implementation-Title", "Gradle Jar File Example")
        //put("Implementation-Version" version)
        put("Main-Class", "HelloKotlinWorld.App")
    }


    baseName = "app"
    classifier = "inajar"
    version = "9"
}

运行:

thufir@dur:~/NetBeansProjects/HelloKotlinWorld$ 
thufir@dur:~/NetBeansProjects/HelloKotlinWorld$ gradle clean ShadowJar

Deprecated Gradle features were used in this build, making it incompatible with Gradle 6.0.
Use '--warning-mode all' to show the individual deprecation warnings.
See https://docs.gradle.org/5.0/userguide/command_line_interface.html#sec:command_line_warnings

BUILD SUCCESSFUL in 1s
4 actionable tasks: 4 executed
thufir@dur:~/NetBeansProjects/HelloKotlinWorld$ 
thufir@dur:~/NetBeansProjects/HelloKotlinWorld$ java -jar build/libs/app-9-inajar.jar 
Hello world.
thufir@dur:~/NetBeansProjects/HelloKotlinWorld$ 

但我认为,鉴于警告,这可能是一种过时的方法。

 类似资料:
  • 我使用的是Xcode版本12.0.1。目前我正在处理协调器,我发现了这个错误 为了解决这个错误,我尝试从这也iOS7-未能实例化默认视图控制器创建了新的故事板,但仍然无法解决。

  • 问题内容: 到目前为止,我一直在使用方法在Java中执行代码。什么时候/为什么要使用或代替? 问题答案: 这是一个特殊的问题,因为这不应该是选择问题。 启动JVM时,你指定要运行的类,并且该类就是程序启动所在的类。 通过,我假设你的意思是JApplet方法。在浏览器中启动小程序时,指定的小程序的方法将作为第一业务顺序执行。 通过,我假设你的意思是Runnable的方法。这是启动新线程时调用的方法。

  • GKE入口可以与Google的托管SSL证书一起使用。这些证书被部署在负载均衡器的边缘服务器中,这导致了非常低的TTFB(到第一个字节的时间) GKE入口有什么问题

  • 我有关于kubernetes入口的问题。 我想将入口与我的亚马逊帐户和/或私有云一起使用,并想分配外部IP。 可以为“服务:服务文档-外部ip”章节分配外部ip,但找不到为入口:入口文档分配外部ip的方法。 我的问题是直接针对库伯内特斯团队的。Simon在这个主题中也提出了类似的问题:如何在GKE 2上强制库伯内特斯入口使用SSL,但当我对私有云AWS感兴趣时,他问了GKE。 提前谢谢你。 [更新

  • 我正在研究我的机器(x86_64 Linux,IvyBridge)中的BIOS代码。我使用以下过程转储BIOS代码: 然后使用读取和反汇编二进制转储: 我知道x86处理器初始化总是从16位8086环境开始,执行的第一条指令在处,即。所以我去那个位置,反汇编代码。 令我惊讶的是,第一条指令是,其功能是使缓存无效,这在处理器上电或重置时似乎不相关。我希望第一条指令只是一个到较低的内存地址。 为什么在之