为可执行 JAR 文件提供外部依赖项

Provide external dependencies to executable JAR file

我有一个简单的实用程序 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 文件。

那么有办法吗? P.S。我google了很多,也有类似的问题,但是好像没有一个和我的一样。

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

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

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