Maven 2 是否有一个Maven插件来在J2EE应用程序中打包实体bean?

Maven 2 是否有一个Maven插件来在J2EE应用程序中打包实体bean?,maven-2,jakarta-ee,glassfish,Maven 2,Jakarta Ee,Glassfish,我还没有找到一个Maven插件或目标,可以打包我的应用程序并将其部署到Glassfish上而不会出错。我得到一个例外: [错误]com.sun.enterprise.admin.cli.CommandException:远程故障:准备应用程序时异常:java.lang.RuntimeException:无法解析与名为[man java really Studes app]的模块范围内的持久性单元引用名称[org.us.impl.MyClass/entityManagerFactory]对应的持久

我还没有找到一个Maven插件或目标,可以打包我的应用程序并将其部署到Glassfish上而不会出错。我得到一个例外:

[错误]com.sun.enterprise.admin.cli.CommandException:远程故障:准备应用程序时异常:java.lang.RuntimeException:无法解析与名为[man java really Studes app]的模块范围内的持久性单元引用名称[org.us.impl.MyClass/entityManagerFactory]对应的持久性单元。请验证您的申请

这不是Spring/Hibernate/EntityManagerFactory/Jpa问题。该应用程序在嵌入式Maven Glassfish容器中运行良好

我在pom.xml中将包装更改为ear,并在部署到Glassfish时得到了这个

部署期间出错:org.xml.sax.SAXParseException:元素类型“application”的内容不完整,必须匹配“(图标?、显示名称、说明?、模块+、安全角色*)”

是否有一个插件可以满足J2EE打包需求

额外的问题:由于实体(仅仅是POJO!)和应用程序需要不同的打包方式,所以最好将它们分为Maven子项目吗

我没有找到一个Maven插件或目标,它将打包我的应用程序并部署到Glassfish中,不会出错

对于打包,您需要的东西都有:jar的
maven jar插件
(包括jar打包JPA实体),war的
maven war插件
,ejb jar的
maven ejb插件
,ear的
maven ear插件
,资源适配器的
maven rar插件

这不是Spring/Hibernate/EntityManagerFactory/Jpa问题。该应用程序在嵌入式Maven Glassfish容器中运行良好

好吧,我仍然想说,无论如何,在某个地方存在JPA配置问题,容器显然无法找到(默认?)持久化单元。但是,由于我不知道您正在运行的应用程序的类型(我猜这是一个Web应用程序,但希望得到确认),您的
persistence.xml
是什么样子,您如何注入
EntityManager
,您如何配置数据库访问,您如何配置Spring,您正在运行的GlassFish版本,等等,很难说更多

我在pom.xml中将包装更改为ear,并在部署到Glassfish时得到了这个

那没那么容易。构建EAR通常涉及多模块构建,您需要提供一个特殊的部署描述符。但我不相信你需要一个耳塞,如果你能避免的话,就不要用它

是否有一个插件可以满足J2EE打包需求

正如我所说,从J2EE到JavaEE6,您需要的一切都有插件。只需提供上述要求的详细信息

额外的问题:由于实体(仅仅是POJO!)和应用程序需要不同的打包方式,所以最好将它们分为Maven子项目吗

实体和应用程序不需要(总是)进行不同的打包,您可以直接在WAR中打包实体(我在推断,但我怀疑这是您的情况)。我只是觉得您在某个地方遇到了配置问题,即使应用程序正在GF Embedded中运行


顺便说一句,Java EE中几乎所有的东西都是POJO(实体、会话bean、消息驱动bean等),但对打包没有直接影响,打包和POJOness是不相关的。

org.us.impl.MyClass有一个@PersistenceUnit注释。persistince由Spring管理,但Glassfish会扫描注释类并尝试自行解决它。你可以告诉Glassfish通过添加

metadata-complete="true"
到您的web.xml,如下所示

<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
                       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                       xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
                       metadata-complete="true">


进一步阅读:

谢谢你,帕斯卡。“实体和应用程序不需要(总是)进行不同的打包,您可以直接在WAR中打包实体(我推断,但我怀疑这是您的情况)。”这很好。我读到的大部分内容是引导我沿着EAR文件的路径前进。一个项目需要ear文件做什么?至于我们的项目。我们有五个JPA实体和一些相当简单的JAX-RS资源作为服务公开。我将重新检查正在创建的war,并确保正确配置了Maven。在使用EJB时,您必须使用EAR。即使这在JavaEE6中不再严格适用,您也可以在战争中部署EJB(当然,您不会从EARs提供的类加载器隔离中获益,但大多数应用程序都不需要)。感谢您发布自己的答案。不过,这与最初的问题相去甚远。