如何使用具有实现依赖项的Gradle创建可执行文件胖子

2021/01/17 10:21 · java ·  · 0评论

我在Gradle 4.6中有一个简单的项目,并希望制作一个可执行的jar。我试过shadowgradle-fatjar-plugingradle-one-jarspring-boot-gradle-plugin插件,但他们都没有增加我的依赖性声明implementation(我没有任何compile的)。它适用于compile例如gradle-one-jar插件,但我希望有implementation依赖关系。

非常感谢你!

您可以使用以下代码。

jar {
    manifest {
        attributes(
                'Main-Class': 'com.package.YourClass'
        )
    }
    from {
        configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) }
    }
 }

请务必使用com.package.YourClass包含的完全合格的类名称替换static void main( String args[] )

这将打包运行时依赖项。如果需要更多信息,请检查文档

根据公认的答案,我需要再添加一行代码:

task fatJar(type: Jar) {
  manifest {
    attributes 'Main-Class': 'com.yourpackage.Main'
  }
  archiveClassifier = "all"
  from {
    configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }
    configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) }
    }
  with jar
}

如果没有此附加行,它将省略我的源文件,而仅添加依赖项:

configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }

使用Gradle Kotlin DSL以类似的方式可以完成相同的任务

val jar by tasks.getting(Jar::class) {
    manifest {
        attributes["Main-Class"] = "com.package.YourClass"
    }

    from(configurations
        .runtime
        // .get() uncomment this on Gradle 6+
        // .files
        .map { if (it.isDirectory) it else zipTree(it) })
}

from { configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) } }

这条线对我来说至关重要。

Kotlin 1.3.72和JVM插件Gradle 6.5.1

在所有这些平台中,语法都在快速变化

tasks {
    compileKotlin {
        kotlinOptions.jvmTarget = "1.8"
    }
    compileTestKotlin {
        kotlinOptions.jvmTarget = "1.8"
    }
    val main = sourceSets.main.get()
    //TODO
    register<Jar>("buildFatJar") {
        group = "app-backend"
        dependsOn(build)
        // shouldRunAfter(parent!!.tasks["prepCopyJsBundleToKtor"]) -> This is for incorporating KotlinJS gradle subproject resulting js file.
        manifest {
            attributes["Main-Class"] = "com.app.app.BackendAppKt"
        }

        from(configurations.compileClasspath.get().files.map { if (it.isDirectory) it else zipTree(it) })
        with(jar.get() as CopySpec)
        archiveBaseName.set("${project.name}-fat")
    }
}
本文地址:http://java.askforanswer.com/ruheshiyongjuyoushixianyilaixiangdegradlechuangjiankezhixingwenjianpangzi.html
文章标签: ,   ,   ,   ,  
版权声明:本文为原创文章,版权归 admin 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!