hol*_*lef 2 debian java classpath
我刚刚在 Debian Wheezy 上安装 activemq 经历了很多痛苦。apt-get install activemq
安装了很多软件包 - openjdk-jre + 大量库,据我所知,所有这些都最终在 /usr/share/java 中。使用完全基本的配置,activemq 可以正常启动,但是一旦我将任何身份验证或授权部分添加到我的配置中,它就会出现org.objectweb.asm.commons.EmptyVisitor
. 这个类肯定是由 /usr/share/java/asm3-all.jar 提供的,它很高兴地安装在我的系统上,大概是由于 activemq 包中指定的依赖关系。
那么什么给呢?经过更多的挖掘,事实证明,运行 activemq 所需的大多数 jar也直接安装在/usr/share/activemq/lib
其中 - 包括 asm3.jar,但至关重要的是,不是 asm3-all.jar,其中包括有问题的类。作为一项实验,我将 jar 从 /usr/share/java/ 复制到 activemq lib 目录......一切正常。
所以我的问题是:如果 activemq 包实际上不使用它们中的任何一个,为什么它会在 /usr/share/java 中安装 150+MB 的 jar ?在我作为 Java 程序员的日子里,我会假设一个 Java 应用程序只需要捆绑它的所有依赖项并完成它,但是 activemq 将所有这些库作为依赖包引入的事实似乎表明有人不这么认为...或者这只是一个球?
小智 5
这就是我认为我将开始在 Java 上称其为“Linux 效应”的东西。当您为 Java 和基于 Java 的应用程序使用包安装程序时,应用程序将根据一般 Linux 标准进行安装:/etc 用于配置,/usr 用于二进制文件,/bin 用于可执行文件等。它将位分散到如此程度我从来没有想过要理解这一切是如何组织的。作为一名同时使用 RHEL 和 Ubuntu 的 Java 开发人员,我从不为任何 JDK 或 Java 应用程序使用包安装程序——尤其是从那时起,我必须记住两个发行版中的内容。正如您所说,大多数 Java 应用程序只需简单的“下载并解压缩到...”即可让它们运行。然后一切都集中在一个地方,毫无疑问在哪里寻找东西。
归档时间: |
|
查看次数: |
1409 次 |
最近记录: |