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中获得类路径条目
希望这能帮助你们中的一些人解决同样的问题