如何在Java软件中包含第三方库/软件?

问题描述:

我现在正在建立一个java项目。在过去,我们始终将第三方的所有内容(解压缩)包含在我们的发行版中,例如ant,junit,jfreechart等。我想知道是否有可能将这些相关的.jar文件,但不是我们的软件版本中的所有内容?那么我们可以得到一个更小巧的版本。那些第三方图书馆许可证不允许我们这样做?你的方式是什么?谢谢,如何在Java软件中包含第三方库/软件?

如果他们的许可证声明你应该分发衍生品与来源,那么你有义务这样做的法律。

另一个问题是,如果他们真的强迫这一点。就我所记得的GPL而言,如果你愿意的话,你应该分发源代码,但还有另一种方法 - 你必须很容易地向用户提供源代码。所以你可以放弃你的可分发资源。

任何方式,你应该看许可证。

编辑:

如果你将决定收拾整个程序分成单独的JAR,我建议Proguard。它是Java优化器,收缩器等等 - 全在一起!要将所有内容打包到一个jar文件中,只需将所有jar文件(程序和库)指定为程序jar文件,并只指定一个jar文件作为输出。通常它工作得很好。

如果可能的话,您真的想保留单独的罐子。查看maven appassembler插件。它以一种可控制的方式为您制作一个“不可移动”的安装程序,做得很好。在结果中,您将拥有一个非常简单的“repo”目录,其中包含所有依赖关系。

我使用maven-assembly-plugin为每个应用程序构建一个jar。该插件可以快速处理将所有库库解压缩的麻烦,并将整个库重新组合为一个单独的罐子。它还支持使用指定的主类来编写清单,这使得可以通过命令行简单地运行应用程序(无论如何,只要指定一个类路径参数就简单多了)。