为可执行 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 目录应该位于某个目录级别。
我有一个简单的实用程序 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 目录应该位于某个目录级别。