将多个罐子合并到一个罐子里

时间:2009-05-19 11:33:24

标签: java jar

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

8 个答案:

答案 0 :(得分:12)

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

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

针对所有这些问题的简单解决方案是使用One-JAR。它允许首先将几个JAR包装成一个而不解压缩它们。并阅读这个答案:Easiest way to merge a release into one JAR file

答案 1 :(得分:4)

更简单的解决方案(IMO)正在使用Maven's assembly plugin,这也是在previous Q&A中链接到的另一个问题的答案之一中描述的。如果您使用Maven(本身就是推荐的工具)作为构建工具,则可以使用此方法。

答案 2 :(得分:2)

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

答案 3 :(得分:1)

如果某些罐子已签名,则通过解压缩/重新包装来丢失签名。

答案 4 :(得分:1)

如果你想让最终用户没有大惊小怪的方式启动具有多个jar依赖关系的程序,你可能需要查看Launch4jJsmooth(我更喜欢Launch4j)。两者都是创建可执行文件的程序,这些可执行文件将jar和JRE包装在一起,以便最终用户看起来与任何其他可执行文件没有什么不同。

答案 5 :(得分:1)

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

答案 6 :(得分:0)

嗯,你丢掉你的第三方罐子的清单,这样可能会给你带来麻烦。例如,您可能会通过丢弃“密封”属性来导致安全问题。

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

答案 7 :(得分:0)

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

Ference Hechler还使用Eclipse导出向导在Eclipse中做了一些很棒的工作:我们一起研究了Eclipse工作增长的FatJar / One-JAR,我可以推荐这个方法,虽然我不知道如何它处理框架。