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 有两处错误, 分别是:

  1. Could not initialize class org.apache.maven.plugin.war.util.WebappStructureSerializer
  2. 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版本进行解决。

具体步骤:

  1. 下载和解压Maven

  2. 在Maven > Installations 添加本地的Maven

  3. 设置Maven配置文件

  4. 在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

hibernate3中出现 could not initialize proxy - no Session 错误的解决的方法以及lazy load的介绍 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 这个问题怎么解决