当前位置: 首页 > 知识库问答 >
问题:

Maven将依赖项插入EAR而不是模块中

司寇飞航
2023-03-14

我有这个项目https://github.com/andreacatania/libreria

它有三个模块“deWeb”“decore”“libreriaear”

模块libreriaEar创建了一个带有deweb和decore模块的EAR存档。我试图将Hibernate使用到模块“decore”中,但maven没有将依赖项导入到“decore”模块中,因此我收到了NoClassFoundException错误。

编辑2

当我将项目部署到WildFly AS中时,我得到了这个错误。

[0m[31m16:01:10,654 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-9) MSC000001: Failed to start service jboss.deployment.subunit."libreriaEar-1.0-SNAPSHOT.ear"."decore-1.0-SNAPSHOT.jar".POST_MODULE: org.jboss.msc.service.StartException in service jboss.deployment.subunit."libreriaEar-1.0-SNAPSHOT.ear"."decore-1.0-SNAPSHOT.jar".POST_MODULE: JBAS018733: Failed to process phase POST_MODULE of subdeployment "decore-1.0-SNAPSHOT.jar" of deployment "libreriaEar-1.0-SNAPSHOT.ear"
  org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:166) [wildfly-server-8.2.0.Final.jar:8.2.0.Final]
        at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1948) [jboss-msc-1.2.2.Final.jar:1.2.2.Final]
        at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1881) [jboss-msc-1.2.2.Final.jar:1.2.2.Final]
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [rt.jar:1.8.0_31]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [rt.jar:1.8.0_31]
        at java.lang.Thread.run(Thread.java:745) [rt.jar:1.8.0_31]
    Caused by: java.lang.RuntimeException: JBAS018757: Error getting reflective information for class com.ac.ejbs.SingBean with ClassLoader ModuleClassLoader for Module "deployment.libreriaEar-1.0-SNAPSHOT.ear.decore-1.0-SNAPSHOT.jar:main" from Service Module Loader
        at org.jboss.as.server.deployment.reflect.DeploymentReflectionIndex.getClassIndex(DeploymentReflectionIndex.java:72) [wildfly-server-8.2.0.Final.jar:8.2.0.Final]
        at org.jboss.as.ee.metadata.MethodAnnotationAggregator.runtimeAnnotationInformation(MethodAnnotationAggregator.java:58)
        at org.jboss.as.ee.component.deployers.InterceptorAnnotationProcessor.handleAnnotations(InterceptorAnnotationProcessor.java:107)
        at org.jboss.as.ee.component.deployers.InterceptorAnnotationProcessor.processComponentConfig(InterceptorAnnotationProcessor.java:92)
        at org.jboss.as.ee.component.deployers.InterceptorAnnotationProcessor.deploy(InterceptorAnnotationProcessor.java:77)
        at org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:159) [wildfly-server-8.2.0.Final.jar:8.2.0.Final]
        ... 5 more
    Caused by: java.lang.NoClassDefFoundError: org/hibernate/service/ServiceRegistry
        at java.lang.Class.getDeclaredFields0(Native Method) [rt.jar:1.8.0_31]
        at java.lang.Class.privateGetDeclaredFields(Class.java:2575) [rt.jar:1.8.0_31]
        at java.lang.Class.getDeclaredFields(Class.java:1908) [rt.jar:1.8.0_31]
        at org.jboss.as.server.deployment.reflect.ClassReflectionIndex.<init>(ClassReflectionIndex.java:57) [wildfly-server-8.2.0.Final.jar:8.2.0.Final]
        at org.jboss.as.server.deployment.reflect.DeploymentReflectionIndex.getClassIndex(DeploymentReflectionIndex.java:68) [wildfly-server-8.2.0.Final.jar:8.2.0.Final]
        ... 10 more
    Caused by: java.lang.ClassNotFoundException: org.hibernate.service.ServiceRegistry from [Module "deployment.libreriaEar-1.0-SNAPSHOT.ear.decore-1.0-SNAPSHOT.jar:main" from Service Module Loader]
        at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:213) [jboss-modules.jar:1.3.3.Final]
        at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:459) [jboss-modules.jar:1.3.3.Final]
        at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:408) [jboss-modules.jar:1.3.3.Final]
        at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:389) [jboss-modules.jar:1.3.3.Final]
        at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:134) [jboss-modules.jar:1.3.3.Final]
        ... 15 more

共有1个答案

易烨磊
2023-03-14

您不希望所有这些依赖在您的应用程序(您的耳朵)。它们很可能已经由容器(应用服务器)提供。EJB模块中的pom.xml提取了所有这些依赖项,因此Maven EAR-plugin按照所述完成了它的工作。

您需要做的是在EJB-Module的pom.xml中将容器提供的所有依赖项标记为“provided”。

例如。

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-core</artifactId>
    <version>4.3.8.Final</version>
    <type>jar</type>
    <scope>provided</scope>  
</dependency>

由于您使用的是Wildfly,只需导入api:s并删除所有这些显式依赖项。

    <dependency>
        <groupId>org.jboss.spec.javax.ejb</groupId>
        <artifactId>jboss-ejb-api_3.2_spec</artifactId>
        <scope>provided</scope>
    </dependency>

    <dependency>
        <groupId>org.hibernate.javax.persistence</groupId>
        <artifactId>hibernate-jpa-2.1-api</artifactId>
        <scope>provided</scope>
    </dependency>

就像我在评论中说的,用这个页面的pom作为参考,你就没事了:

http://www.castertheboss.com/jboss-server/wildfly-8/maven-configuration-for-java-ee-7-projects-on-wildfly

 类似资料:
  • 我有一个多模块的项目,即。 在一个开发周期中,我向Module1添加了一个类。module2中的类依赖于它。 我的本地中没有这些工件。运行此: 然而,这至少从两个方面提出了一个问题: 我必须经历较慢的安装阶段,而不是较快的编译阶段 我有同一个项目的两个版本,在这些版本中有冲突的修改。我不能用它们各自的修改运行相同的Java类,只能运行当前安装的修改,考虑到它们都是相同的快照版本 这两种方法都有解决

  • 我有2个maven项目A和B。 B对A的胖jar有一个maven编译时依赖项。 在将B作为maven项目导入时,a作为模块依赖项而不是目标jar添加。 有没有办法禁用此功能? B的pom。xml(依赖项部分) <代码> A的pom.xml(工件细节): <代码> 问题: 这两个是Intellij项目中的模块。无论我以何种方式导入它们,项目B的依赖项列表都将项目A显示为模块依赖项,而不是项目A的ja

  • 在使用scalatest时,我遇到了一个奇怪的问题。我有一个带有多个模块的maven项目。如果我直接在模块中执行mvn测试。它可以正常工作,但如果在根文件夹中执行,它会抱怨编译时缺少包(依赖项)。 我的配置如下所示: 插件配置: 如果我从maven scala插件中删除目标,它将编译,但scalatest将找不到测试源并退出,并且没有执行任何测试 : 你知道我做错了什么吗?! 干杯

  • 我在Maven中有一个相当简单的带有子模块的项目结构: 在中,我定义了所有子模块的属性,如库版本或插件配置: 直接在节点中设置库版本。 在中设置节点。 尝试不同的库版本。 使用以及库是否存在。 在中运行。 在中运行。 在中运行 在中运行。 在中运行。

  • 在我基于maven的IntelliJ项目中,我有2个模块-模块A和B。 pom。模块A的xml创建了一个uber jar(包括项目无法访问的依赖项),并将其作为带有分类器“withdeps”的工件附加 当我导入maven模块时,IntelliJ将模块的A源代码添加到模块B的依赖项中(忽略“withdeps”分类器)。 是否可以强制Intellij将模块A依赖项添加到B作为“maven库”而不是默认

  • 我有两个野蝇服务器。服务器A连接到服务器B上的JMS主题和EJB主题,它们都是Wildfly8.2.0.final。 是否可以去掉这些,而只要求在jboss-deployment-structure.xml中加载特定的Wildfly模块?这些Maven依赖关系似乎会增加我的。war的大小。 谢了! 编辑: 为了连接到服务器B上的JMS主题,我使用: 执行这些查找的代码在my.war使用的maven