Payara Server 5部署EAR包失败:application.xml中library-directory元素异常
问题根源
报错核心是XML Schema验证失败:你的application.xml使用Java EE 6的schema(version="6"),该schema严格要求元素顺序,<library-directory>必须放在所有<module>元素之后,但当前配置既缺少EJB/Web模块的<module>条目,又把<library-directory>放在了不符合规则的位置。
解决思路
1. 修正application.xml的元素顺序与内容
手动补充模块配置并调整<library-directory>的位置,示例配置如下:
<?xml version="1.0" encoding="UTF-8"?> <application version="6" 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/application_6.xsd"> <display-name>APPNAME-ear</display-name> <!-- 补充EJB模块配置 --> <module> <ejb>APPNAME-ejb-1.0-SNAPSHOT.jar</ejb> </module> <!-- 补充Web模块配置 --> <module> <web> <web-uri>APPNAME-web-1.0-SNAPSHOT.war</web-uri> <context-root>/APPNAME-web</context-root> </web> </module> <!-- 将library-directory移至所有module之后 --> <library-directory>lib</library-directory> </application>
修改后重新执行clean & build,再部署到Payara Server即可。
2. 升级至Java EE 8 Schema(推荐适配Payara 5)
Payara 5.2021.9完全兼容Java EE 8,更新application.xml的版本与schema地址,同时保证元素顺序合规:
<?xml version="1.0" encoding="UTF-8"?> <application version="8" 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/application_8.xsd"> <display-name>APPNAME-ear</display-name> <module> <ejb>APPNAME-ejb-1.0-SNAPSHOT.jar</ejb> </module> <module> <web> <web-uri>APPNAME-web-1.0-SNAPSHOT.war</web-uri> <context-root>/APPNAME-web</context-root> </web> </module> <library-directory>lib</library-directory> </application>
3. 修复NetBeans项目模块关联
若NetBeans未自动生成<module>条目,说明EAR模块未正确关联EJB/Web模块:
- 右键点击EAR模块 → Properties → Packaging
- 在Available Projects中选中EJB和Web模块,添加到Packaged Projects列表
- 重新构建项目,NetBeans会自动生成包含正确
<module>条目的application.xml
内容的提问来源于stack exchange,提问作者Patrick Palmerini
相关产品推荐
相关产品推荐

