【问题标题】:Where to put external libs in GlassfishGlassfish 中外部库的放置位置
【发布时间】:2011-10-16 21:38:07
【问题描述】:

我使用 Netbeans 7 创建了一个 JSF2 项目,并成功地将其部署在 Glassfish 3.1 上。 不过,ear 文件已经变得相当大(6.5mb),其中大部分由外部 jar 文件(如 apache commons、solrj、primefaces 和 pdfrenderer 等)组成,这些文件被复制到相应的 war/ejb 文件中。

我的问题是:我怎样才能避免这种情况并让我的 ear 文件更小 - 它应该只包含我创建的东西,外部库应该只在服务器上部署一次。

我在网上搜索了这个问题的答案,我唯一发现的是将外部 jar 文件放在 glassfish 安装目录中的“domains/domain1/lib”或“domains/domain1/lib/ext”下并取消选中“ Netbeans 项目库设置中的 Package' 标志,但到目前为止这些都不起作用(我总是得到 ClassNotFoundExceptions)。

我是否必须做其他事情,在某处调整类路径设置,或者我该如何实现?有人有解决办法吗?

更新:好的,我发现这只发生在我本地安装的带有 Netbeans 的 Glassfish 上(它是一台运行 64 位 Windows 7 的笔记本电脑)。在我的远程 Linux 机器上,它按预期工作,即我能够将所有外部库放入 'domains/domain1/lib' - 我的 ear 文件现在只有 ~700k :) 我将在我的 Mac 和另一个 Windows 7 机器上尝试这个,看看这是与操作系统相关的问题还是其他问题。

【问题讨论】:

标签: jakarta-ee netbeans glassfish external


【解决方案1】:

我想我现在可以自己回答这个问题:domain1/lib 似乎是放置所有这些 jar 文件的正确位置。至少它在我尝试过的 2 个 Linux 机器和我的 Mac 上完美运行。我还发现了为什么它在我的 Windows 7 笔记本电脑上不能正常工作。 如果您使用 Netbeans 附带的 Glassfish 安装,则域路径是用户特定的,这意味着您必须将 jar 文件放在

C:\Users\`用户名`\.netbeans\7.0\config\GF3\domain1\lib

按预期工作,在

下的 jars

C:\Program Files\glassfish-3.1\glassfish\domain\domain1\lib

另一方面,似乎被类加载器忽略

【讨论】:

  • 尽管它们都被称为 domain1,但由于位于不同的位置,它们完全不同。第一个有效,因为那是 netbeans 为您创建的域,并且实际上正在启动。
【解决方案2】:

属于类路径的唯一目录是domain1\lib\classes 目录。将你的 jar 放在那里会将它们添加到类路径中。

你也可以把你的ear文件放到lib目录下(原APP-INF\lib)。这是放置您的共享罐子的地方。

【讨论】:

    猜你喜欢
    • 2012-06-04
    • 2023-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-19
    相关资源
    最近更新 更多