gpt4 book ai didi

java - J老板 : WAR file in EAR can't find JAR library on classpath

转载 作者:搜寻专家 更新时间:2023-10-30 19:45:10 27 4
gpt4 key购买 nike

我在 JBoss 4.3-eap 上部署带有捆绑 wars、jar 和配置文件(.properties 文件)的 ear 时遇到问题。这是我的耳朵结构:

+app.ear   
+lib
*.jar libraries that the war's use
+classes
*.properties and other configuration files
+META-INF
application.xml
jbos-app.xml
app.war
app2.war
appn.war

我的 jboss-app.xml 中有以下内容:

<jboss-app>
<jmx-name>app.startup.JbossStartUpServer:service=JbossStartUpService</jmx-name>
</jboss-app>

我的 application.xml 看起来像这样:

<application id="app_id">
<display-name>App>/display-name>
<description>TheApp>/description>
<!--
<module id="core">
<java>lib/core.jar</java>
</module>

<module id="tag">
<java>lib/tag.jar</java>
</module>
-->
<module id="app">
<web>
<web-uri>app.war</web-uri>
<context-root>/</context-root>
</web>
</module>

<module id="app2">
<web>
<web-uri>app2.war</web-uri>
<context-root>/app2</context-root>
</web>
</module>

<module id="appn">
<web>
<web-uri>appn.war</web-uri>
<context-root>/appn</context-root>
</web>
</module>

<security-role id="secRole">
<description>users</description>
<role-name id="appRoleName">users</role-name>
</security-role>

<library-directory>lib</library-directory>

</application>

基本上,在部署 ear 时,我遇到了一个问题,我的一个 war 无法在 core.jar 文件中找到一个类(java.lang.NoClassDefFoundError)。我认为这是因为 war 没有找到这个库,即使它在 lib 文件夹/类路径中。如果我尝试取消注释前两个模块以添加第一方库(core.jartag.jar),突然间属性文件不再找到(它们现在位于 lib/classes 中,因此,无论如何,我希望它们被类加载器拾取。理想情况下,我想将类放在它自己的目录中并添加它分别到类路径,但现在我只是想让它工作)。

我尝试了一些其他的东西,包括手动添加 core.jar 到 war 的 manifest.mf 文件,将 UseJBossWebLoader 更改为 true in jboss-web.deployer 下的 jboss-service.xml 文件,以及上述的各种组合,都没有成功。我要么从类路径(lib 文件夹)中丢失了 classes 目录并且我的属性文件都没有被拾取,要么 war 无法从 jar 访问正确的类.我认为一定有一些配置是错误的,虽然我已经尝试阅读 JBoss 执行 EAR 部署和类加载的方式,但我似乎无法使它适应我当前的设置。

如有任何建议,我们将不胜感激。

以下是我一直在查看的一些网站:
Raible Designs JBoss ClassLoader Logic

这些只是我浏览过的几个网站。问题也可能源于项目的设置,因为这是一个已建立的大型项目(在某种程度上)正在从 weblogic 部署迁移到 Jboss。因此,如果有任何应该起作用但不起作用的东西,则可能是某些代码/项目配置存在问题。不幸的是,我还没有到可以判断它是 JBoss 相关问题还是项目问题的地步。

最佳答案

<library-directory>application.xml 中标记是一个 JavaEE5 特性,我不认为 JBoss 4.3 完全兼容 JavaEE5(它可以做 EJB3,是的,但它只是部分支持)。

因此您需要返回使用显式声明的 JAR 文件:

<module>
<java>lib/core.jar</java>
</module>

至于您的属性文件,您需要将它们所在的目录添加为 java 模块,因此对于您的示例:

<module>
<java>lib/classes</java>
</module>

关于java - J老板 : WAR file in EAR can't find JAR library on classpath,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1330067/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com