5

我知道 Eclipse 会生成一个可运行的 jar 文件,其中包含提取并包含在 jar 文件中的所有库 .jar 文件。从命令提示符手动创建 jar 文件时,我该如何做类似的事情。我是否需要将所有 lib jar 提取到 classes 文件夹中?

目前我正在使用 -

    jar cvfm example.jar manifest.txt -C  Classes/ .

这会创建一个包含所有类文件的 jar 文件,并且我需要将所有库 jar 放在与此 example.jar 存在的同一文件夹中。

4

2 回答 2

3

jar 命令行实用程序无法执行此类操作。依赖问题有3个主要解决方案:

  1. 在您的 MANIFEST.MF 中,您可以引用其他 jar 文件作为类路径的一部分,然后人们可以调用您的代码,java -jar [just your jar]并且您的依赖项将被拾取
  2. 您可以将代码和依赖项打包到一个胖 jar 中(这就是您所描述的)。通常您只需将项目转换为使用一些构建工具(比简单的 javac 和 jar 更高级)并配置该工具。例如与 Maven在此处此处查看 2 种不同的方法
  3. (再次使用构建工具)您可以使用比胖罐更好的东西 - 使用one-jar。不同之处在于,使用胖 jar,您会冒着不同库中同名文件“冲突”的风险
于 2013-04-24T17:34:32.870 回答
0

上述答案无疑是正确的。诚然又快又脏:

将所需的 jar 文件复制到 javac 创建类文件的输出目录中。

cp $LIB_PATH/*.jar $TARGET_PATH
cd $TARGET_PATH
for filename in ./*.jar; do
    echo "merge library $filename to FAT jat"
    unzip "$filename"
    rm -rf META-INF
    rm "$filename"
done

然后创建 jar 文件并确保包含所有必需的类:

jar cmf manifest.mf $TARGET_JAR_NAME com/* javax/* org/*
于 2022-01-02T23:36:17.317 回答