jboss eap(jboss 7) java应用编译通过,部署后启动报找不到类

helei518 2014-12-05 09:42:53
如题,java程序依赖dom4j.jar,在pom.xml添加依赖后编译通过,但是部署到JBOSS启动就报找不到dom4j里面的类,什么原因呢?
...全文
1409 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
tianfang 2014-12-26
  • 打赏
  • 举报
回复
jboss-eap-6.2\modules\system\layers\base\org\dom4j\main EAP 6.2中有dom4j
helei518 2014-12-24
  • 打赏
  • 举报
回复
我用的是jboss EAP
loveunittesting 2014-12-16
  • 打赏
  • 举报
回复
引用 7 楼 yys79 的回复:
6楼回答是正确的,你发布jar,肯定是不带那些支持jar包的,2种方式,1种就是按6楼的方式,用jboss-deployment-structure.xml文件进行引用;另一种,你可以用发布ear的方式,在ear的lib目录内加入这些jar包。ear里再包含你自己的jar包。
说错了,是4楼的答案正确
loveunittesting 2014-12-16
  • 打赏
  • 举报
回复
6楼回答是正确的,你发布jar,肯定是不带那些支持jar包的,2种方式,1种就是按6楼的方式,用jboss-deployment-structure.xml文件进行引用;另一种,你可以用发布ear的方式,在ear的lib目录内加入这些jar包。ear里再包含你自己的jar包。
tianfang 2014-12-11
  • 打赏
  • 举报
回复
后面一个是正确的 这个是从迁移手册中拷贝到 ,定义了依赖的模块,你的应用中把dom4j加入。 除了定义 还可以定义排除,类似上例后面的,排除jsf的main,依赖jsf的1.2
tianfang 2014-12-11
  • 打赏
  • 举报
回复
<?xml version="1.0" encoding="UTF-8"?>

<jboss-deployment-structure xmlns="urn:jboss:deploym ent-structure:1.0">
	<deployment>
		<dependencies>
			<module nam e="javax.faces.api" slot="1.2" export="true" />
			<module nam e="com.sun.jsf-impl" slot="1.2" export="true" />
		</dependencies>
	</deployment>
	<sub-deployment name="jboss-seam-booking.war">
		<exclusions>
			<module name="javax.faces.api" slot="m ain" />
			<module name="com.sun.jsf-impl" slot="m ain" />
		</exclusions>
		<dependencies>
			<module name="javax.faces.api" slot="1.2" />
			<module name="com.sun.jsf-impl" slot="1.2" />
		</dependencies>
	</sub-deployment>
</jboss-deployment-structure>
tianfang 2014-12-11
  • 打赏
  • 举报
回复
jboss中包含了dom4j模块,jboss-as-7.1.1.Final\modules\org\dom4j\main\module.xml 在你的部署包中,增加一个文件 jboss-deployment-structure.xml,例子如下
<jboss-deploym ent-structure xm lns="urn:jboss:deploym ent-structure:1.0">
<deploym ent>
<dependencies>
<m odule nam e="javax.faces.api" slot="1.2" export="true"/>
<m odule nam e="com .sun.jsf-im pl" slot="1.2" export="true"/>
</dependencies>
</deploym ent>
<sub-deploym ent nam e="jboss-seam -booking.war">
<exclusions>
<m odule nam e="javax.faces.api" slot="m ain"/>
<m odule nam e="com .sun.jsf-im pl" slot="m ain"/>
</exclusions>
<dependencies>
<m odule nam e="javax.faces.api" slot="1.2"/>
<m odule nam e="com .sun.jsf-im pl" slot="1.2"/>
</dependencies>
</sub-deploym ent>
</jboss-deploym ent-structure>
humanity 2014-12-05
  • 打赏
  • 举报
回复
Java 的编译和 C 之类的编译不同,C 之类的是有一个 Linking 过程,把库函数插入到生成的 exe 程序中,所以编译链接完之后,运行的时候不用再配置那些东西(不过如果是依赖链接库的话,那就跟Java依赖 class path 一样了)。Java 在编译和运行时都需要提供 class path 支持。 你的 maven 有一个本地 repository 目录,对吧?打开 eclipse 参数中 maven 部分找找看你的 settings 文件中是怎么写的。这个本地的 repository 中会有你的 dom4j 的 jar 文件的。
引用 2 楼 humanity 的回复:
有一点,你没注意到: 编译和运行是两回事。 你编译时使用 Maven 引入了 dom4j 支持类库,那只是那个 maven builder 本身的功能,跟 JBoss 没有关系。 在编译时需要用的类,在运行时也依然要求出现在 class path 清单中。 在 Eclipse 中 Java Build Path 顾名思义,它只是解决“Build”问题时的 class path,跟 "Run” 时的 class path 没有任何关系。 现在你在 JBoss 中运行时少了 dom4j,那你把 dom4j 复制到 jboss 上的某个 lib 目录下不就正常了?
humanity 2014-12-05
  • 打赏
  • 举报
回复
有一点,你没注意到: 编译和运行是两回事。 你编译时使用 Maven 引入了 dom4j 支持类库,那只是那个 maven builder 本身的功能,跟 JBoss 没有关系。 在编译时需要用的类,在运行时也依然要求出现在 class path 清单中。 在 Eclipse 中 Java Build Path 顾名思义,它只是解决“Build”问题时的 class path,跟 "Run” 时的 class path 没有任何关系。 现在你在 JBoss 中运行时少了 dom4j,那你把 dom4j 复制到 jboss 上的某个 lib 目录下不就正常了?
helei518 2014-12-05
  • 打赏
  • 举报
回复
补充下,发布的是jar文件

6,787

社区成员

发帖
与我相关
我的任务
社区描述
JBoss技术交流
社区管理员
  • JBoss技术交流社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧