我怎么能重新包装一个包含所有依赖项的jar文件?

时间:2011-07-08 19:19:23

标签: java import jar dependencies export

我正在开发一个应该独立运行的应用程序。但是,这个项目涉及一个包含大量依赖项的.jar文件,如果我只是将这个.jar文件与应用程序一起分发,它将无法工作。

我想知道是否有任何方法可以解压缩文件,添加依赖项并重新打包它?我希望有一些自动机制,因为手动过程可能需要几个小时,并且可能还有其他引用的jar文件。

P.S。我正在使用Eclipse,但由于我将使用Web Start部署此项目,因此使用内置导出工具导出项目可能不是一个好主意,因为我的所有尝试都以ClassNotFoundException, so I suspect I might have to pack the project into several jars.

结束

谢谢!

5 个答案:

答案 0 :(得分:5)

由于文件夹结构

,重新打包解压缩的JAR有点令人沮丧

解压时:

list.add(j).getArea();

你得到一个jar xvf JAR_NAME.jar 文件夹

重新包装JAR:

  • 删除旧jar

    JAR_NAME/

  • 进入文件夹

    rm JAR_NAME.jar

  • 打包引用父文件夹的jar

    cd JAR_NAME

并且您将在父文件夹中找到jar cf ../JAR_NAME.jar *,其中原始文件已解压缩,如果您打包文件夹本身,则不会获得第一个文件夹级别。

答案 1 :(得分:1)

看看jar jar。听起来它会做你需要的。

答案 2 :(得分:1)

是的,打包和打包会让你感到烦恼,尤其是在像Ubuntu这样的Linux环境中,

在解压缩之前,请确保将Java_Home和路径导出到该文件夹​​,如下所示: 在您的主目录中,您很可能会有一个名为.bashrc的文件。转到文件末尾并添加以下内容

export JAVA_HOME=<path to your JDK install e.g. /opt/jdk>
export PATH=$JAVA_HOME/bin:$PATH

这将设置您的JAVA_HOME环境变量 - 通常由基于Java的应用程序使用。然后它将该目录添加到PATH变量中。操作系统将PATH理解为可执行文件的父目录列表。

现在解压缩jar xvf JAR_NAME.jar 打包回来jar cf JAR_NAME.jar *

答案 3 :(得分:1)

对于Spring Boot 2.1.9.RELEASE,我设法打开并重新包装胖罐,如下所示: 移到带有jar文件的文件夹中。

提取jar文件

jar xvf app.jar

删除旧的jar文件

rm app.jar

在父目录中创建新的jar文件

jar cmf0 META-INF/MANIFEST.MF ../app.jar  *

m ...使用特定的清单文件

0 ...禁用压缩,从而避免了对依赖项(jar文件)进行压缩

文档也可以在这里找到:https://docs.oracle.com/javase/tutorial/deployment/jar/build.html

答案 4 :(得分:0)

您在eclipse中尝试过“导出runnable jar”吗?它应该适合你。

看看这张照片:  picture