2010-03-31 38 views
1

我试图找到使用由包管理器安装的Java库的最佳方式,而不是仅将副本放入$ {project.root}/libJava:在Linux中使用来自包管理器的jar库

我的发行版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

不想把这个作为一个答案,以防万一我错了,但我认为你可以在命令行运行程序时用类路径选项指定其他位置。缩写的选项是-cp – 2010-03-31 02:04:49

回答

1

MavenIvy都做类似的事情,但最后还是会将jar添加到应用程序的lib文件夹中。

此外,您将失去对应用程序将使用运行时的jars版本的控制权。如果发行版的更新更改了这些jar,则应用程序可能因更改API签名而失败。在您自己以外的计算机上部署也可能会导致定位这些罐子的问题。最后,如果你的应用程序使用了很多jar,你可能会遇到问题,创建一个classpath,达到可以存储在环境变量中的限制。

我不知道是否有这样的系统可用于罐子作为建立一个lib文件夹是最常用的方法,简单,安全与光的缺点复制罐为每个应用程序。这说磁盘空间很便宜,瓶子很少高于1兆,所以它很小。

这就是说你可以创建一个延伸到常春藤的例子,这会让你的系统成为一个存储库,然后构建过程会将你系统中不同位置的jar复制到你的项目的lib文件夹中,从而绕过类路径限制。该插件可以通过使用包管理器的数据库来了解jar包的位置(如果可用的话),您可以发现同一个源的版本。这样,只要经理用于安装罐子,您就可以支持自定义地点。

如果我有时间和精力,这将是我的第一个解决这个问题的途径。

这是说我仍然想知道投资是否会产生足够的回报,而不是只复制罐子。你比我更好地判断这是为了你自己的需要。

0

不,您应该依赖$ CLASSPATH变量,并且运行它的系统或shell脚本应负责正确设置$ CLASSPATH路径。在Windows中,通过%CLASSPATH%也可以使用。

+0

在我的系统上,未设置$ CLASSPATH变量。我可以依靠它在其他系统上设置吗? Classpath在另一个系统上会有所不同吗? Gentoo中的Netbeans包提供了像log4j,jdom,jsch和apache-commons这样的软件包,因此它知道这些库位于哪里。 – jonescb 2010-03-31 13:08:10