【问题标题】:Merging Multiple Jars in to a Single Jar将多个 jar 合并到一个 jar
【发布时间】:2010-10-27 07:14:08
【问题描述】:

我的应用程序需要多个 jar 才能工作。由于它是一个桌面应用程序,我不能让用户负责安装。因此,在我的构建脚本中,我将 jars 内容解压缩到我的构建目录中,删除清单文件,编译我的软件并再次 jar。一切正常,我的问题是这个过程是否有任何长期的副作用?

【问题讨论】:

    标签: java jar


    【解决方案1】:

    如果某些罐子已签名,则打开/重新包装会丢失签名。

    【讨论】:

      【解决方案2】:

      一个更简单的解决方案 (IMO) 是使用Maven's assembly plugin,这也在previous Q&A 中链接到的另一个问题的答案之一中进行了描述。前提是您使用 Maven(它本身就是推荐的工具)作为构建工具。

      【讨论】:

        【解决方案3】:

        One-JAR 将完成这项工作,并且有一个新版本 (0.97),它支持 Spring 和 Guice 等框架,用户现在正在将其打包到 One-JAR 档案中。 http://one-jar.sourceforge.net

        Ference Hechler 还在 Eclipse 中使用 Eclipse 导出向导完成了一些出色的工作:我们在 FatJar/One-JAR 上进行了合作,Eclipse 工作由此发展而来,我可以推荐它作为一种方法,尽管我不知道如何它很好地处理了框架。

        【讨论】:

          【解决方案4】:

          如果您的主要目标平台是 Windows 桌面,那么您还可以考虑从应用程序的 jar 中生成 Windows 原生 exe

          【讨论】:

            【解决方案5】:

            另一个不错的选择是ProGuard,它也可以缩小和/或混淆代码。

            【讨论】:

            • 嗯,10 年前和 2 个赞。想知道现在是不是一样:)
            【解决方案6】:

            如果您想让最终用户轻松启动具有多个 jar 依赖项的程序,您可能需要查看 Launch4jJsmooth(我更喜欢 Launch4j)。两者都是创建可执行文件的程序,这些可执行文件将 jar 和 JRE 包装在一起,因此对于最终用户来说,它与任何其他可执行文件没有什么不同。

            【讨论】:

              【解决方案7】:

              过去,有些 JAR 的内容很奇怪(比如 DB2 驱动程序包含 com.ibmcom.IBM;在 Windows 文件系统中解压后,这两个包会合并)。

              您需要注意的唯一问题是 META-INF 中的签名 jar 和其他文件,它们可能在多个源 JAR 中具有相同的名称。

              所有这些问题的简单解决方案是使用One-JAR。首先,它允许将多个 JAR 打包成一个而无需解包。并阅读这个答案:Easiest way to merge a release into one JAR file

              【讨论】:

                【解决方案8】:

                好吧,您正在丢弃第三方罐子的清单,这可能会给您带来问题。例如,您可能会因为丢弃“Sealed”属性而导致安全问题。

                为什么不创建一个简单的安装程序和一个脚本来启动正确设置 CLASSPATH 的应用程序?

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 2011-07-02
                  • 2013-09-30
                  • 1970-01-01
                  • 1970-01-01
                  • 2016-12-24
                  • 2013-08-28
                  • 1970-01-01
                  • 2010-12-26
                  相关资源
                  最近更新 更多