Could not initialize class org.apache.maven.plugin.war.util.WebappStructureSerializer 问题解决
Posted oscar999
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Could not initialize class org.apache.maven.plugin.war.util.WebappStructureSerializer 问题解决相关的知识,希望对你有一定的参考价值。
问题:
Could not initialize class org.apache.maven.plugin.war.util.WebappStructureSerializer
发生场景:
在Eclipse中创建了一个Maven类型的项目,项目的打包方式是war, 也就是Web 项目, 可是创建完成的项目的pom.xml 有两处错误, 分别是:
Could not initialize class org.apache.maven.plugin.war.util.WebappStructureSerializer
web.xml is missing and <failOnMissingWebXml> is set to true
原因及解析:
虽然这两个错误提示不会影响项目的正常运行, 但是项目上显示连个红色的叉叉总归是不好看。
首先看一下第一个问题 Could not initialize class org.apache.maven.plugin.war.util.WebappStructureSerializer
, 不能对类进行实例化。这个错误的原因是Eclipse 和 Maven 插件(maven-war-plugin)的版本的兼容问题, eclipse从2021-03版本更新为2021-06版本后,如果Maven的版本还是在2.x 版本的话就会出现这个错误。而在 Eclipse创建项目的时候, 会使用一个默认的版本。 所以解决方法就是在 pom.xml 指定maven-war-plugin的版本。
第二个问题 web.xml is missing and <failOnMissingWebXml> is set to true
。 在Eclipse 中创建的Maven的 war打包类型的项目默认是不会产生web.xml 文件的, 虽然web.xml 文件是 Java Web 项目的入口文件,但是在后来的Java Web 项目,可以使用Java 类文件来取代web.xml 文件, 也就是web.xml 不是必要的。 不过在 Eclipse中还是会给出提示, 解决方法就是也就包含在错误信息中, 即在 pom.xml 配置failOnMissingWebXml 。
解决方法:
在pom.xml 增加如下配置:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>3.3.2</version>
<configuration>
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>
</plugin>
</plugins>
</build>
增加上述部分之后, 错误消失, 如下图:
注意:如果执行Maven > Update Project… 操作之后, 项目的Java Compliler 和 JRE库又回到 1.5 的话,可以通过设置Maven的 JDK版本进行解决。
具体步骤:
-
下载和解压Maven
-
在Maven > Installations 添加本地的Maven
-
设置Maven配置文件
-
在Maven的settings.xml 增加如下配置:
<profile>
<id>JDK-1.8</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.8</jdk>
</activation>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
</properties>
</profile>
</profiles>
could not initialize proxy - no Session
异常:org.hibernate.LazyInitializationException: could not initialize proxy - no Session
原因:hibernate3 many-to-one的默认选项是 lazy = "proxy"
解决方法:<many-to-one> 和 <set> 中设置 lazy="false"
hbm.xml配置例如以下:
<?
xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="po.Emp" table="EMP">
<id name="empno" type="java.lang.Short">
<column name="EMPNO" precision="4" scale="0" />
<generator class="increment" />
</id>
<property name="ename" type="java.lang.String">
<column name="ENAME" length="10" />
</property>
<property name="job" type="java.lang.String">
<column name="JOB" length="9" />
</property>
<property name="mgr" type="java.lang.Short">
<column name="MGR" precision="4" scale="0" />
</property>
<property name="hiredate" type="java.util.Date">
<column name="HIREDATE" length="7" />
</property>
<property name="sal" type="java.lang.Double">
<column name="SAL" precision="7" />
</property>
<property name="comm" type="java.lang.Double">
<column name="COMM" precision="7" />
</property>
<many-to-one name="dept" class="po.Dept" column="DEPTNO" ></many-to-one>
</class>
</hibernate-mapping>
导致异常的原因:
使用HibernateTemplate的save、load等方法时。它的Session管理策略是:打开session。进行相关操作。默认使用lazy载入结果,不会发出sql语句,返回的是代理类,然后关闭session,此时你得到了一个Orgnization的代理类。假设你要调用Orgnization实例的getter方法,那么它就会去实际载入Orgnization对象,发出sql语句,可此时session已经关闭,因此会抛出异常,提示ould not initialize proxy - no Session。
以上是关于Could not initialize class org.apache.maven.plugin.war.util.WebappStructureSerializer 问题解决的主要内容,如果未能解决你的问题,请参考以下文章
could not initialize proxy - no Session
Could not initialize class org.apache.xpath...
PowerDesigner 逆向工程 Could not Initialize JavaVM!
jacob运行tomcat报错 Could not initialize class com.jacob.com.ComThread
Could not initialize class utils.JdbcUtils
Could not initialize class net.sf.json.util.JSONUtils 这个问题怎么解决