我正在尝试找到使用包管理器安装的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。
答案 0 :(得分:1)
Maven和Ivy都做了类似的事情,但最终你仍然将jars添加到应用程序的lib文件夹中。
此外,您将失去对应用程序将使用运行时的jar版本的控制权。如果您的发行版的更新更改了这些jar,您的应用程序可能会因更改API签名而失败。在您自己以外的计算机上部署也可能会导致找到这些罐子的问题。最后,如果您的应用程序使用多个jar,则可能会在创建类路径时遇到问题,该类路径达到可以存储在环境变量中的限制。
我不知道是否有这样的系统可用于罐子,因为构建一个lib文件夹是最常用的方法,简单,安全,轻微不利于为每个应用程序复制jar。这说磁盘空间很便宜,并且罐子的峰值很少高于1兆,因此它很小。
据说你可以创建一个对Ivy的扩展,例如,这将使你的系统成为一个存储库,然后构建过程会将jar从系统中的不同位置复制到项目的lib文件夹,从而绕过类路径限制。插件可以通过使用包管理器的数据库来了解罐的位置(如果可用),您也可以从同一来源发现版本。这样,只要管理员用于安装罐子,您就可以支持自定义位置。
如果我有时间和精力,那将是我解决这个问题的第一个调查途径。
据说,我仍然想知道投资是否会产生足够的回报,而不仅仅是复制罐子。你最好根据自己的需要来判断。
答案 1 :(得分:0)
不,你应该依赖$ CLASSPATH变量,运行它的系统或shell脚本应该正确设置$ CLASSPATH路径。同样适用于Windows,通过%CLASSPATH%。