【问题标题】:Glassfish 4: deploy problems when building with MavenGlassfish 4:使用 Maven 构建时的部署问题
【发布时间】:2016-12-08 17:11:43
【问题描述】:

我在 Glassfish 4 上部署从 ant 转换为 maven 的项目时遇到问题。当我使用 build.xml 生成 war 文件时,我可以毫无问题地部署它,但是当我使用Maven 并尝试部署它,我得到以下异常:

Error occurred during deployment: Exception while loading the app : java.lang.IllegalStateException: ContainerBase.addChild: start: org.apache.catalina.LifecycleException: org.apache.catalina.LifecycleException: java.lang.ArrayIndexOutOfBoundsException: 48188. 

我认为 pom.xml 文件中存在一些问题。我会在这里粘贴它,但它是一个相当大的文件(该项目使用了很多依赖项),所以我不确定它是否会有很大帮助。什么可能导致该异常?

pom.xml 文件: http://pastebin.com/aQS2inaQ

委托人

克里斯·迈克尔斯

【问题讨论】:

  • 遗憾的是,这些解决方案都不适用于我的问题。附件。克里斯迈克尔斯
  • 您的 pom 需要大量清理。依赖项的默认范围是compile,因此您正在打包大量不应该存在的东西,例如所有应该具有test 范围的测试框架,以及GlassFish 提供的所有JSR,它们会发生冲突。 (最好用 Java EE 7 坐标替换单个 JSR 依赖项:<dependency> <groupId>javax</groupId> <artifactId>javaee-api</artifactId> <version>7.0</version> <scope>provided</scope> </dependency>
  • 您是否还可以添加来自 maven 的 full 错误日志,而不仅仅是那一行?
  • 那行是完整的错误日志,是 glassfish 提供的所有信息

标签: maven ant glassfish


【解决方案1】:

比较 Ant 和 Maven 创建的 2 个 WAR 的内容。 WEB-INF/lib 中的 jar 文件列表应该类似。我猜 maven 版本比 Ant 版本包含的内容要多得多。

您应该将 provided 范围分配给仅提供 GlassFish 中已经可用的 API 的依赖项:

<dependency>
  <groupId>javax.el</groupId>
  <artifactId>el-api</artifactId>
  <version>1.1</version>
  <scope>provided</scope>
</dependency>

<dependency>
  <groupId>org.hibernate.javax.persistence</groupId>
  <artifactId>hibernate-jpa-2.0-api</artifactId>
  <version>1.0.1.Final</version>
  <scope>provided</scope>
</dependency>

<dependency>
  <groupId>org.glassfish</groupId>
  <artifactId>javax.ejb</artifactId>
  <version>3.1</version>
  <scope>provided</scope>
</dependency>

<dependency>
  <groupId>org.glassfish</groupId>
  <artifactId>javax.faces</artifactId>
  <version>2.1.7</version>
  <scope>provided</scope>
</dependency>

<dependency>
  <groupId>org.jboss.spec.javax.transaction</groupId>
  <artifactId>jboss-transaction-api_1.1_spec</artifactId>
  <version>1.0.0.Final</version>
  <scope>provided</scope>
</dependency>

<dependency>
  <groupId>com.sun.jersey</groupId>
  <artifactId>jersey-bundle</artifactId>
  <version>1.11</version>
  <scope>provided</scope>
</dependency>

或者只是删除这些依赖项并将它们替换为

<dependency> 
  <groupId>javax</groupId>
  <artifactId>javaee-api</artifactId>
  <version>7.0</version>
  <scope>provided</scope>
</dependency>

【讨论】:

  • 嘿,谢谢,这确实有帮助。我的特殊问题是战争文件 icu4j.jar 中的一个特定 jar。 mvn 依赖树中的验证显示该文件来自 jaxen 1.1.1。使用 jaxen 1.1.6 代替从依赖项中删除了该 jar 并解决了问题。
【解决方案2】:
  • galssfish服务器的jdk版本是什么?
  • 您构建应用程序使用的 jdk 版本是什么?
  • 您是否在项目中添加了 maven 依赖项?
  • 在几次更新 maven 依赖项后 Jre 系统库 应用程序中的自动更改。所以你检查了 更新maven后java构建路径中的jre系统库版本 依赖关系?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多