2013-07-27 84 views
1

这个问题可能是理论上的,但我找不到任何适当的解决方案。创建jar问题

假设我在做它采用3 jar文件(休眠,log4j的,杰克逊)的模块。

现在我想编译我的模块并创建一个jar,这样我的模块就可以被任何其他模块使用,并且该模块不应该再需要三个jar(hibernate,log4j,jackson)。

即我的模块JAR文件不应该有任何相关性。

我使用eclipse.I我能够创建一个JAR(项目 - >导出 - >罐子),但不包括在它的罐子 指导我怎样才能做到这一点。

这里有什么用的apache ant吗?

+0

*“这里有任何使用的apache蚂蚁吗?”*理论上是的。我的意思是Ant可以从每个Jar获得所有的类,并制作一个包含它们的“胖”Jar。 OTOH通常是一个更好的主意,只需确保适当的Jars在运行时类路径上。这是1)为了确保保留每个Jar清单中的重要信息。 2)保存原始罐子的数字签名。 &3)为了避免法律上的麻烦(大多数API要求你按原样分发它们) –

+0

这是maven和apache常春藤解决的问题,这是否是一个选项? –

+0

@ThorbjørnRavnAndersen:只要教程为学习它们很小,易于使用.. :-)如果你可以给我提供一些参考资料,它会很好...考虑马诺伯... :-) – user2511713

回答

0

您将需要包括你的依赖的所有类到您的jar文件。 由于jar文件只是一个zip文件,因此您可以使用任何归档管理器(如Winzip)来探索它们,然后将依赖的jar文件的内容复制到您自己的jar中,注意保持目录结构不变。

这样你就可以将所有东西放在一个罐子里。

+0

使用Zip工具创建Jars是非常有问题的。 Zip工具不仅支持Java不支持的压缩级别,而且您还有我的评论中概述的其他问题。 –

1

Eclipse的运行的JAR向导

Eclipse的运行的JAR向导(文件→导出...→Java的→运行的JAR文件)允许开发人员从现有的运行配置创建可执行的jar文件:

enter image description here

该向导包含3个用于处理相关性的选项:

  1. 将所需的库提取到生成的jar中: unarchives库 依赖关系并将它们重新打包到您的可执行jar文件中。这个 选项具有简单性的优点,并且不需要定制的类加载器 。但是重新打包库罐可能会导致其他问题,并且不会保留签名罐子的签名。这 选项也可能违反了您使用的库的许可条款。

  2. 包所需的库到生成的JAR:创建一个“胖罐子” 使用自定义类加载器。得到的罐子包含 应用程序的类和资源,以启动应用程序 一个小的自定义类装载器,它知道如何找到罐子库在另外一个JAR档案

  3. 需要复制库需要 库罐子...:创建应用程序归档并将 任何所需的库依赖项复制到目标文件夹。

我认为第二个选择适合您的目的。

+0

你可以解释一下启动配置是什么。我的jar文件doenot有一个主要的功能。它只有助手功能和类 – user2511713

+0

@ user2511713:如果你没有一个主要类作为启动程序使用,你可以考虑使用一些脂肪jar创建插件,如JarSplice-http://ninjacave.com/jarsplice –