【问题标题】:how to create a runnable jar file from command line similar to eclipse如何从类似于 eclipse 的命令行创建可运行的 jar 文件
【发布时间】:2013-04-18 09:11:34
【问题描述】:
我了解到 Eclipse 会生成一个可运行的 jar 文件,其中包含提取的所有库 .jar 文件并将其包含在 jar 文件中。从命令提示符手动创建 jar 文件时,我该如何做类似的事情。我是否需要将所有 lib jar 提取到 classes 文件夹中?
目前我正在使用 -
jar cvfm example.jar manifest.txt -C Classes/ .
这会创建一个包含所有类文件的 jar 文件,并且我需要将所有库 jar 放在与此 example.jar 存在的同一文件夹中。
【问题讨论】:
标签:
java
linux
command-line
jar
executable-jar
【解决方案1】:
无法从 jar 命令行实用程序中执行此类操作。依赖问题有3个主要解决方案:
- 在您的 MANIFEST.MF 中,您可以引用其他 jar 文件作为类路径的一部分,然后人们可以使用
java -jar [just your jar] 调用您的代码,您的依赖项将被提取
- 您可以将您的代码和依赖项打包到一个胖 jar 中(这是您所描述的)。通常您只需将项目转换为使用一些构建工具(比简单的 javac 和 jar 更高级)并配置该工具。例如with maven。查看 2 种不同的方法 here 和 here
- (再次使用构建工具)您可以使用比胖罐更好的东西 - 使用 one-jar。不同之处在于,使用胖 jar 时,您会冒着不同库中同名文件“冲突”的风险
【解决方案2】:
以上答案无疑是正确的。诚然又快又脏:
将所需的 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/*