2011-07-13 79 views
4

我已经创建了mytest.jar文件,库中包含了近30个库文件,还有jar。 是否有可能将所有的库jar放入mytest.jar中,以便我只需要分发一个jar? 可能是使用清单可以完成的吗? 谢谢。罐子里面的java库

+0

可能的重复[是否有可能创建一个“超级”jar包含项目类和项目依赖项作为与自定义清单文件的罐子?](http://stackoverflow.com/questions/1832853/is-it - 可以创建超级jar包含项目类和专业版) – skaffman

+0

拆分/重新打包API Jars可能会违反分发许可证。如果这是桌面应用程序,[Java Web Start](http://stackoverflow.com/tags/java-web-start/info)是解决启动应用程序的整个问题的更好方法。这是最终用户的“一键式”解决方案,甚至更好,它不仅能够根据用户需要提供额外的JARS服务器,还可以在任何更改时自动更新! –

回答

4

不开箱即用。但是,One-Jar提供了一个解决方案。它适用于独立应用程序,这是我认为你正在制作的。

如果您要制作小程序,One-Jar将无法使用。

7

使用标准Java类加载器无法从jars-inside-jar中加载类。但是可以使用自定义类加载器,例如UberJar可以工作。

maven shade plugin采取不同的方法。它将打开你所依赖的所有罐子,并将它们(连同你自己的班级)打包成一个大罐子。然后可以使用普通的类加载器。这更简单,也可以不使用jarjar

+3

需要特别小心,同时使用'maven树荫插件'或解开所有瓶子和重新打包为一体,因为两个罐子可能有公用文件文件,另一个罐子内容可能会被另一个覆盖 –

+2

阴影插件允许重命名包装(即“阴影“)来避免这种情况 - 但是,你必须小心。 –

+0

有人创建了这个包,这真是太神奇了。我曾经想过这么做,并且很高兴认识其他人创造它。 – djangofan

1

为此目的,通常使用一个罐子重新包装工具,如jarjar

+0

@Lorenzo Heiko已经添加了什么,这里是链接:http://code.google.com/p/jarjar/请注意,这是一个Java约束,你可能会更好通过这些罐子分离和添加他们到类路径。 – Ayusman