【问题标题】:Provide external dependencies to executable JAR file为可执行 JAR 文件提供外部依赖项
【发布时间】:2020-11-16 17:25:27
【问题描述】:

我有一个简单的实用 Java 程序,它使用一个依赖项,它本身有很多其他的依赖项。我需要将此实用程序打包在一个可执行的 jar 文件中。我使用 Gradle,我的 JAR 任务如下所示:

jar {
    version = ''
    baseName = 'rpc_utility'
    duplicatesStrategy = DuplicatesStrategy.EXCLUDE
    manifest {
        attributes 'Main-Class': 'com.example.rpcclient.MainKt'
    }
    zip64=true

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

这实际上是这样做的,我得到了一个可以工作的 JAR 文件,但它变成了 ~60MB。 问题是在这个 jar 文件假设运行的环境中,还有另一个 fat jar,它保证拥有这个 jar 需要的所有依赖项。 因此,如果有一种方法可以“告诉”我的实用程序 jar 文件,它需要的所有依赖项都在那里,打包在相邻的 jar 文件中,我可以将它变成一个很小的几千字节的 jar 文件。

那么有没有办法做到这一点? 附言我google了很多,也有类似的问题,但似乎没有一个和我的一样。

【问题讨论】:

    标签: java jar classpath executable-jar


    【解决方案1】:

    您实际上可以在可执行 jar 的清单中定义类路径。 像这样:

    manifest {
      attributes(
         'Main-Class': 'com.example.rpcclient.MainKt',
         "Class-Path": "lib/all-dependencies.jar"
      )
    }
    

    然后,如果您将 all-dependencies.jar 文件放入名为“lib”的目录中,那么这应该可以工作。在这种情况下,您的 jar 和 lib 目录应该位于某个目录级别。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-22
      • 2011-08-26
      • 1970-01-01
      • 2016-11-04
      • 2023-01-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多