Java Glassfish 3.1b41-JDO83008:CMP编译失败:找不到类文件

Java Glassfish 3.1b41-JDO83008:CMP编译失败:找不到类文件,java,deployment,glassfish,glassfish-3,Java,Deployment,Glassfish,Glassfish 3,我们有一个“旧的”JavaEE应用程序,我们希望将其从旧的Sun应用程序服务器9.1移植到当前的Glassfish 3.1。我们更新了部署描述符xml文件(重命名了它们,更新了DocType,根据DTD进行了验证,没有其他内容)。但是,当我们尝试部署到GF3.1中时,会出现以下错误: JDO83008: CMP Compilation failed: C:\workspace\glassfish31eclipsedefaultdomain\generated\ejb\archivetool-a


我们有一个“旧的”JavaEE应用程序,我们希望将其从旧的Sun应用程序服务器9.1移植到当前的Glassfish 3.1。我们更新了部署描述符xml文件(重命名了它们,更新了DocType,根据DTD进行了验证,没有其他内容)。但是,当我们尝试部署到GF3.1中时,会出现以下错误:

JDO83008: CMP Compilation failed: 
C:\workspace\glassfish31eclipsedefaultdomain\generated\ejb\archivetool-app-1.9.5\archivetool-ejb-1.9.5_jar\de\ems\archivetool\ejb\metadata\cd\eb\CdBean_821611534_ConcreteImpl.java:10: 
cannot access de.ems.archivetool.ejb.framework.AbstractCMPBean
class file for de.ems.archivetool.ejb.framework.AbstractCMPBean not found

C:\workspace\glassfish31eclipsedefaultdomain\generated\ejb\archivetool-app-1.9.5\archivetool-ejb-1.9.5_jar\de\ems\archivetool\ejb\productdata\product\eb\ProductionLibraryBean40992531_ConcreteImpl.java:416: 
cannot find symbol

symbol  : class EBSBusinessException
location: package de.ems.archivetool.ejb.framework

WARNUNG: JDO83004: CMP Compilation failed. See log for details.
SCHWERWIEGEND: Exception while invoking class org.glassfish.ejb.startup.EjbDeployer prepare method
SCHWERWIEGEND: Exception while invoking class org.glassfish.javaee.full.deployment.EarDeployer prepare method
SCHWERWIEGEND: Exception while preparing the app
SCHWERWIEGEND: JDO83004: CMP Compilation failed. See log for details.
org.glassfish.deployment.common.DeploymentException: JDO83004: CMP Compilation failed. See log for details.
但我们仍然可以在旧的SUN应用服务器中部署

该应用程序由4个模块和一个构建模块组成。通常,由两个EJB模块(一个WAR模块和一个JAR模块)组成的.ear文件是使用Maven构建的,没有任何问题(UnitTest Success等)。 (以及由此产生的后果)

因此,一切都很好,但当我们尝试将应用程序部署到GF3.1时,会出现“未找到类文件”错误。未找到的类位于JAR模块内,包含EJB模块的基类

有人有出发点吗

问候,,
安德烈亚斯

好的,经过几个小时的谷歌搜索,我终于找到了这个问题的确切答案。 重要的部分是:

JavaEE6规范对哪些JAR文件施加了严格的规则 从企业存档(EAR)文件中可见。请参阅第节 EE.8.3.3;具体来说,应用程序客户机模块不应具有 访问任何EJB JAR文件,除非应用程序客户端JAR文件 清单类路径显式引用EJB JAR文件

这是GlassFish服务器v2的一个变化,其中的应用程序 客户端自动访问EAR文件中的所有EJB JAR文件 以及EAR文件顶层的所有JAR文件。遵守 更严格的规范语言,GlassFish Server 3.0.1无法 自动为应用程序客户端提供对这些JAR的访问 档案

您需要做的是,让maven将jar(和其他依赖项)放入ear容器中的库文件夹中。您可以通过将以下内容添加到ear pom.xml中来实现:

<build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-ear-plugin</artifactId>
      <configuration>

      //here starts the important part
      <defaultLibBundleDir>lib</defaultLibBundleDir>
      <archive>
        <manifest>
          <addClasspath>true</addClasspath>
        </manifest>
      </archive>
      //end of important part

   <modules>
     <jarModule>
       <groupId>gID</groupId>
       <artifactId>aID</artifactId>
     </jarModule>

     //etc some more ebjs, war, ...
   </modules>

org.apache.maven.plugins
maven耳朵插件
//这里开始重要的部分
解放党
真的
//重要部分结束
基德
帮助
//等等更多的EBJ,战争。。。
这将把jar模块放入一个文件夹库中,所有依赖的EJB将在MANIFEST.MF中获得类路径条目

希望这能帮助你们中的一些人解决同样的问题