微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

制作胖 jar 文件并添加依赖项 - Eclipse IDE

如何解决制作胖 jar 文件并添加依赖项 - Eclipse IDE

我正在使用 Eclipse IDE,使用 Kryonet 和 LibGDX 库。

我目前正在尝试制作一个胖 jar 文件 - 使 kryonet 成为一个依赖项。

如何制作一个大的 jar 文件

这是我的 build.gradle 文件

sourceCompatibility = 1.7
sourceSets.main.java.srcDirs = [ "src/" ]
sourceSets.main.resources.srcDirs = ["../core/assets"]

project.ext.mainClassName = "uk.ac.aston.teamproj.game.desktop.DesktopLauncher"
project.ext.assetsDir = new File("../core/assets")

task run(dependsOn: classes,type: JavaExec) {
    main = project.mainClassName
    classpath = sourceSets.main.runtimeClasspath
    standardInput = system.in
    workingDir = project.assetsDir
    ignoreExitValue = true
}

task debug(dependsOn: classes,type: JavaExec) {
    main = project.mainClassName
    classpath = sourceSets.main.runtimeClasspath
    standardInput = system.in
    workingDir = project.assetsDir
    ignoreExitValue = true
    debug = true
}

task dist(type: Jar) {
    manifest {
        attributes 'Main-Class': project.mainClassName
    }
    dependsOn configurations.runtimeClasspath
    from {
        configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) }
    }
    with jar
}


dist.dependsOn classes

eclipse.project.name = appName + "-desktop"

解决方法

听起来你可以使用“Shadow”gradle插件来制作胖罐子,它使这个过程变得更简单。

您可以找到有关如何使用它的详细说明here

如果你想要一个可执行的 jar,不要忘记指定 MainClass 属性。下面是一个用法示例:

buildscript {
    ext {
        shadowVersion = "5.2.0"
        mainClassName = "com.yourapp.>>>CLASS_NAME_CONTAINING_YOUR_MAIN_METHOD_GOES_HERE<<<"
    }

    // Repositories for build scripts
    repositories {
        // Maven
        mavenLocal()
        mavenCentral()

        // Sonatype repositories
        maven { url "https://oss.sonatype.org/content/repositories/snapshots/" }
        maven { url "https://oss.sonatype.org/content/repositories/releases/" }
    }

    // Dependencies for build scripts
    dependencies {
        classpath "com.github.jengelman.gradle.plugins:shadow:$shadowVersion"
    }
}

apply plugin: 'com.github.johnrengelman.shadow'
apply plugin: 'java'

jar {
    manifest {
        attributes(
                "Main-Class": project.mainClassName,)
    }
}

这会将以下内容添加到您的构建中:

  • 向项目添加 shadowJar 任务。
  • 向项目添加 shadow 配置。
  • 配置 shadowJar 任务以包含项目主 sourceSet 中的所有源。
  • 配置 shadowJar 任务以捆绑 runtimeClasspath 配置中的所有依赖项。
  • classifier 任务的 shadowJar 属性配置为“all”。
  • 配置 shadowJar 任务以生成具有以下内容的清单:
    • 从标准 jar 任务继承所有配置。
    • Class-Path 添加 Manifest 属性,该属性附加来自影子配置的 all dependencies

shadowJar 任务将构建胖 jar,如果您在 jar 配置中为清单指定了 Main-Class 属性,则它可以是可执行的,就像我在上面的示例中所做的那样。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?