我正在尝试找到使用包管理器安装的 Java 库的最佳方法,而不是仅仅将副本放入 ${project.root}/lib
我的发行版 Gentoo 有一个 Java 库包,比如 jdbc-postgresql。
它被安装到 /usr/share/jdbc-postgresql/lib/jdbc-postgresql.jar
我假设这个路径在 Ubuntu、Fedora 或 Arch 中可能不同。
有什么办法可以像 C 那样做吗?您只需添加 -lfoo
,链接器就会找到 libfoo.so。
我使用的是 Ant 1.8.0 和 Java 1.6.0_19。
最佳答案
Maven和 Ivy两者都做类似的事情,但最后你仍然会把 jars 添加到应用程序的 lib 文件夹中。
此外,您将失去对应用程序将在运行时使用的 jar 版本的控制。如果您的发行版更新更改了这些 jar,您的应用程序可能会因更改 API 签名而失败。在您自己以外的计算机上部署也可能会导致定位这些 jar 的问题。最后,如果您的应用程序使用许多 jar,您可能会在创建类路径达到环境变量中可存储内容的限制时遇到问题。
我不知道是否有这样的系统可用于 jar,因为构建 lib 文件夹是最常用的方法,简单、安全,但缺点是为每个应用程序复制 jar。这表示磁盘空间很便宜,jar 的峰值很少超过 1 兆,所以它很小。
也就是说,您可以创建一个 Ivy 扩展,例如,这将使您的系统成为一个存储库,然后构建过程会将 jar 从您系统中的不同位置复制到您项目的 lib 文件夹中,从而绕过类路径限制.该插件可以通过使用包管理器的数据库来了解 jar 的位置(如果可用),您也可以从同一来源发现版本。这样,只要管理器用于安装 jar,您就可以支持自定义位置。
如果我有时间和精力,那将是我解决这个问题的第一个调查途径。
话虽这么说,但我仍然想知道这项投资是否会产生足够的返回,而不是仅仅复制 jar 。您比我更能根据自己的需要对此进行评估。
关于Java:在 Linux 中使用包管理器中的 jar 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2549913/