我试图找到使用包管理器安装的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和java1.6.0u19。

最佳答案

MavenIvy都做了类似的事情,但最终仍然会将jar添加到应用程序的lib文件夹中。
此外,您还将失去对应用程序将使用运行时的jar版本的控制。如果发行版的更新更改了这些jar,应用程序可能无法更改api签名。在您自己以外的计算机上部署也可能会给定位这些jar带来问题。最后,如果应用程序使用许多jar,那么在创建类路径时可能会遇到问题,无法达到存储在环境变量中的限制。
我不知道是否有这样的系统可以用于jar,比如构建lib文件夹是最常用、最简单、最安全的方法,但对于每个应用程序来说,复制jar有一个很小的缺点。这意味着磁盘空间很便宜,jar的峰值很少高于1兆欧,所以它很小。
这意味着你可以创建一个扩展到ivy的实例,使你的系统成为一个存储库,然后构建过程将jar从你系统中的不同位置复制到你项目的lib文件夹,从而绕过类路径限制。插件可以通过使用包管理器的数据库(如果可用)来了解jar的位置,您还可以从同一个源中发现版本。这样,只要使用管理器安装jar,就可以支持定制的位置。
如果我有时间和精力,这将是我解决这个问题的第一条调查途径。
尽管如此,我仍然怀疑这项投资是否会产生足够的回报,而不仅仅是复制罐子。为了你自己的需要,你比我更能判断。

10-08 04:35