将 java 8 迁移到 11。 java.lang.NoClassDefFoundError: javax/servlet/ServletContextListener

Nor*_*era 6 java glassfish maven apache-commons-fileupload jakarta-ee

    \n
  • 我正在将应用程序从 java8 迁移到 java11,我所做的更改是:
  • \n
\n
    \n
  1. 我将maven编译器版本从3.3更新到3.8.0
  2. \n
  3. 我将 maven compiler.source 从 1.8 更新到 11
  4. \n
  5. 我将 maven compiler.target 从 1.8 更新到 11
  6. \n
  7. 我用相应的 jakarta 依赖项替换了 javax 依赖项,我按照这篇文章中的说明进行操作。
  8. \n
\n
    \n
  • 我正在使用 Eclipse 和 Glassfish 6.1.0,在 glassfish 中我必须添加一些对项目很重要的库,但是我在添加 commons-fileupload 库时遇到了问题,我发现 Apache Commons 代码使用了 javax 包。* 包无法使用 Jakarta EE 9 和 GlassFish 6.1.0 代码进行编译,并且 commons-fileupload 依赖于 javax.servlet,GlassFish 管理控制台使用它来加载实现。

    \n
  • \n
  • 另外,我正在与:

    \n
      \n
    • JDK 11
    • \n
    • GWT Eclipse 插件 2.8.1
    • \n
    • Eclipse 2021-03 (4.19.0) 内部版本号:20210312-0638
    • \n
    • 玻璃鱼6.1.0
    • \n
    \n
  • \n
\n

当我尝试部署应用程序时,出现此错误:

\n
[2021-12-07T14:34:55.416-0500] [glassfish 6.1] [SEVERE] [AS-WEB-CORE-00108] [jakarta.enterprise.web.core] [tid: _ThreadID=47 _ThreadName=admin-listener(3)] [timeMillis: 1638905695416] [levelValue: 1000] [[\n  ContainerBase.addChild: start: \norg.apache.catalina.LifecycleException: java.lang.IllegalArgumentException: java.lang.NoClassDefFoundError: javax/servlet/ServletContextListener\n    at org.apache.catalina.core.StandardContext.start(StandardContext.java:5537)\n    at com.sun.enterprise.web.WebModule.start(WebModule.java:507)\n    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:877)\n    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:860)\n    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:644)\n... \nCaused by: java.lang.IllegalArgumentException: java.lang.NoClassDefFoundError: javax/servlet/ServletContextListener\n    at org.apache.catalina.core.StandardContext.addListener(StandardContext.java:2867)\n    at org.apache.catalina.core.StandardContext.addApplicationListener(StandardContext.java:2073)\n    at com.sun.enterprise.web.TomcatDeploymentConfig.configureApplicationListener(TomcatDeploymentConfig.java:212)\n    at com.sun.enterprise.web.TomcatDeploymentConfig.configureWebModule(TomcatDeploymentConfig.java:71)\n    at com.sun.enterprise.web.WebModuleContextConfig.start(WebModuleContextConfig.java:215)\n    at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:295)\n    at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:122)\n    at org.apache.catalina.core.StandardContext.start(StandardContext.java:5534)\n    ... 73 more\n\n
Run Code Online (Sandbox Code Playgroud)\n
\n

我附上了完整的pom.xml和 server\xc2\xa8日志文件。

\n

pom.xml

\n
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"\n    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">\n    <modelVersion>4.0.0</modelVersion>\n    <groupId>com.focussscm</groupId>\n    <artifactId>focussSCMParent</artifactId>\n    <version>5.5.0</version>\n    <packaging>pom</packaging>\n\n\n    <modules>\n        <module>../focussSCMModel</module>\n        <module>../focussSCMJobsWSClientJobService</module>\n        <module>../focussWSClientDataExchangeService</module>\n        <module>../focussSCMBusiness</module>\n        <module>../focussSCMJobs</module>\n        <module>../focussSCMSecurity</module>\n        <module>../focussSCM</module>\n    </modules>\n\n    <properties>\n        <!-- Explictly specify a default encoding to avoid relying on the OS locale. -->\n        <project.build.sourceEncoding>Cp1252</project.build.sourceEncoding>\n        <project.build.scriptEncoding>Cp1252</project.build.scriptEncoding>\n\n        <!-- Artifact versions -->\n        <axis.version>1.4</axis.version>\n        <commons-fileupload.version>1.4</commons-fileupload.version>\n        <commons.discovery.version>0.2</commons.discovery.version>\n        <gwt.version>2.9.0</gwt.version>\n        <gwt-highcharts.version>1.7.0</gwt-highcharts.version>\n        <gwtext.version>2.0.5</gwtext.version>\n        <itext.version>5.4.2</itext.version>\n        <jackson.version>1.8.10</jackson.version>\n        <jakarta-faces.version>3.0.2</jakarta-faces.version>\n        <jakarta.ws.rs.version>3.0.0</jakarta.ws.rs.version>\n        <jakarta.xml.ws.version>4.0.0-RC1</jakarta.xml.ws.version>\n        <jakarta.mail.version>2.0.1</jakarta.mail.version>\n        <jakarta.ejb.version>4.0.0</jakarta.ejb.version>\n        <jakarta.activation-api.version>2.0.1</jakarta.activation-api.version>\n        <javax.wsdl.version>1.5.1</javax.wsdl.version>\n        <jakarta.jws-api.version>3.0.0</jakarta.jws-api.version>\n        <jakartarpc-api.version>1.1.4</jakartarpc-api.version>\n        <jms.version>1.1</jms.version>\n        <jmxri.version>1.2.1</jmxri.version>\n        <jmxtools.version>1.2.1</jmxtools.version>\n        <json.version>20171018</json.version>\n        <jstl.version>1.2</jstl.version>\n        <log4j.version>1.2.17</log4j.version>\n        <poi.version>3.9</poi.version>\n        <org.quartz-scheduler.version>1.5.2</org.quartz-scheduler.version>\n        <servlet-api.version>5.0.0</servlet-api.version>\n        <smartgwt.version>4.0-focuss</smartgwt.version>\n        \n        <spring.version>5.2.8.RELEASE</spring.version>\n        <spring.security.version>5.3.4.RELEASE</spring.security.version>\n        <slf4j-log4j.version>1.8.0-beta4</slf4j-log4j.version>\n        \n        <spring-security-web.version>3.1.4.RELEASE</spring-security-web.version>\n        <spring-webmvc.version>3.0.7.RELEASE</spring-webmvc.version>\n        <gwt.directory>pages/module/gwt</gwt.directory>\n\n        <!-- Glassfish server variables -->  \n`<glassfish.glassfishDirectory>C:\\Development\\Apps\\Glassfish6</glassfish.glassfishDirectory>`\n        <glassfish.user>User</glassfish.user>\n        <glassfish.adminPassword>123456</glassfish.adminPassword>\n        <glassfish.domain.name>fscmFocuss</glassfish.domain.name>\n        <glassfish.domain.host>localhost</glassfish.domain.host>\n        <glassfish.domain.adminPort>1234</glassfish.domain.adminPort>\n\n\n        <!-- Maven GWT compiler version and parameters -->\n        <maven.compiler.version>3.8.0</maven.compiler.version>\n        <maven.compiler.source>11</maven.compiler.source>\n        <maven.compiler.target>11</maven.compiler.target>\n        <maven.resources.version>3.2.0</maven.resources.version>\n        <compiler.style>OBF</compiler.style>\n        <compiler.log.level>INFO</compiler.log.level>\n        <glassfish.port>8081</glassfish.port>\n        <install.plugin.version>2.5.2</install.plugin.version>\n\n        <!-- Maven War plugin version and parameters -->\n        <war.plugin.version>3.0.0</war.plugin.version>\n\n        <!-- Maven ear plugin version and parameters -->\n        <ear.plugin.version>2.10.1</ear.plugin.version>\n\n        <cargo.maven3.plugin.version>1.9.3</cargo.maven3.plugin.version>\n        \n        <!-- ${basedir}/local.properties -->\n        <dropbox.home>${dropbox.home.dir}</dropbox.home>\n    </properties>\n\n    <dependencyManagement>\n        <dependencies>\n            <!-- package\\GWT\\gwt-servlet.jar -->\n            <!-- https://mvnrepository.com/artifact/com.google.gwt/gwt-servlet -->\n            <dependency>\n                <groupId>com.google.gwt</groupId>\n                <artifactId>gwt-servlet</artifactId>\n                <version>${gwt.version}</version>\n                <scope>runtime</scope>\n            </dependency>\n\n            <!-- only_for_building\\gwt\\gwt-2.5.1\\gwt-user.jar -->\n            <!-- https://mvnrepository.com/artifact/com.google.gwt/gwt-user -->\n            <dependency>\n                <groupId>com.google.gwt</groupId>\n                <artifactId>gwt-user</artifactId>\n                <version>${gwt.version}</version>\n                <scope>provided</scope>\n            </dependency>\n\n            <!-- https://mvnrepository.com/artifact/com.gwtext/gwtext -->\n            <dependency>\n                <groupId>com.gwtext</groupId>\n                <artifactId>gwtext</artifactId>\n                <version>${gwtext.version}</version>\n            </dependency>\n\n            <!-- https://mvnrepository.com/artifact/com.google.gwt/gwt-dev -->\n            <dependency>\n                <groupId>com.google.gwt</groupId>\n                <artifactId>gwt-dev</artifactId>\n                <version>${gwt.version}</version>\n                <scope>provided</scope>\n            </dependency>\n            \n            <!-- https://mvnrepository.com/artifact/com.google.gwt/gwt-dev -->\n            <dependency>\n                <groupId>com.google.gwt</groupId>\n                <artifactId>gwt</artifactId>\n                <version>${gwt.version}</version>\n                <type>pom</type>\n            </dependency>\n                        \n            <!-- only_for_building\\gwt\\smartgwtpro-4.0\\lib -->\n            <dependency>\n                <groupId>com.isomorphic.smartgwt.pro</groupId>\n                <artifactId>smartgwt-pro</artifactId>\n                <version>${smartgwt.version}</version>\n                <exclusions>\n                    <!-- Exclusion: required to avoid conflicting with the asm dependency below -->\n                    <exclusion>\n                        <groupId>asm</groupId>\n                        <artifactId>asm</artifactId>\n                    </exclusion>\n                </exclusions>\n            </dependency>\n\n            <!-- only_for_building\\gwt\\HighCharts\\org.moxieapps.gwt.highcharts-1.5.0.jar -->\n            <!-- https://highcharts4gwt.github.io/ -->\n            <dependency>\n                <groupId>org.moxieapps.gwt</groupId>\n                <artifactId>org.moxieapps.gwt.highcharts</artifactId>\n                <version>${gwt-highcharts.version}</version>\n            </dependency>           \n\n            <!-- only_for_building\\axis\\axis.jar -->\n            <!-- https://mvnrepository.com/artifact/org.apache.axis/axis -->\n            <dependency>\n                <groupId>org.apache.axis</groupId>\n                <artifactId>axis</artifactId>\n                <version>${axis.version}</version>\n            </dependency>\n\n            <!-- only_for_building\\itextpdf-5.4.2 -->\n            <!-- https://mvnrepository.com/artifact/com.itextpdf/itextpdf -->\n            <dependency>\n                <groupId>com.itextpdf</groupId>\n                <artifactId>itextpdf</artifactId>\n                <version>${itext.version}</version>\n            </dependency>\n\n            <!-- only_for_building\\log4j\\log4j-1.2.15.jar -->\n            <!-- https://mvnrepository.com/artifact/log4j/log4j -->\n            <dependency>\n                <groupId>log4j</groupId>\n                <artifactId>log4j</artifactId>\n                <version>${log4j.version}</version>\n            </dependency>\n\n            <!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core -->\n            <!-- <dependency> -->\n            <!-- <groupId>org.apache.logging.log4j</groupId> -->\n            <!-- <artifactId>log4j-core</artifactId> -->\n            <!-- <version>${log4j.version}</version> -->\n            <!-- </dependency> -->\n\n            <!-- only_for_building\\poi-3.9 -->\n            <!-- https://mvnrepository.com/artifact/org.apache.poi/poi -->\n            <dependency>\n                <groupId>org.apache.poi</groupId>\n                <artifactId>poi</artifactId>\n                <version>${poi.version}</version>\n            </dependency>\n\n            <!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml -->\n            <dependency>\n                <groupId>org.apache.poi</groupId>\n                <artifactId>poi-ooxml</artifactId>\n                <version>${poi.version}</version>\n            </dependency>\n\n            <!-- package\\json -->\n            <!-- https://mvnrepository.com/artifact/org.codehaus.jackson/jackson-core-lgpl -->\n            <dependency>\n                <groupId>org.codehaus.jackson</groupId>\n                <artifactId>jackson-core-lgpl</artifactId>\n                <version>${jackson.version}</version>\n            </dependency>\n\n            <!-- https://mvnrepository.com/artifact/org.codehaus.jackson/jackson-mapper-lgpl -->\n            <dependency>\n                <groupId>org.codehaus.jackson</groupId>\n                <artifactId>jackson-mapper-lgpl</artifactId>\n                <version>${jackson.version}</version>\n            </dependency>\n\n            <!-- only_for_building\\json -->\n            <!-- https://mvnrepository.com/artifact/org.json/json -->\n            <dependency>\n                <groupId>org.json</groupId>\n                <artifactId>json</artifactId>\n                <version>${json.version}</version>\n            </dependency>\n\n            <!-- https://mvnrepository.com/artifact/jakarta.xml.rpc/jakarta.xml.rpc-api -->\n            <dependency>\n                <groupId>jakarta.xml.rpc</groupId>\n                <artifactId>jakarta.xml.rpc-api</artifactId>\n                <version>${jakartarpc-api.version}</version>\n            </dependency>\n\n\n            <!-- https://mvnrepository.com/artifact/jakarta.servlet/jakarta.servlet-api -->\n            <dependency>\n                <groupId>jakarta.servlet</groupId>\n                <artifactId>jakarta.servlet-api</artifactId>\n                <version>${servlet-api.version}</version>\n                <scope>provided</scope>\n            </dependency>\n\n\n            <!-- https://mvnrepository.com/artifact/jakarta.ws.rs/jakarta.ws.rs-api -->\n            <dependency>\n                <groupId>jakarta.ws.rs</groupId>\n                <artifactId>jakarta.ws.rs-api</artifactId>\n                <version>${jakarta.ws.rs.version}</version>\n            </dependency>\n            \n            <!-- https://mvnrepository.com/artifact/jakarta.xml.ws/jakarta.xml.ws-api -->\n            <dependency>\n                <groupId>jakarta.xml.ws</groupId>\n                <artifactId>jakarta.xml.ws-api</artifactId>\n                <version>${jakarta.xml.ws.version}</version>\n            </dependency>       \n\n\n            <!-- https://mvnrepository.com/artifact/jakarta.mail/jakarta.mail-api -->\n            <dependency>\n                <groupId>jakarta.mail</groupId>\n                <artifactId>jakarta.mail-api</artifactId>\n                <version>${jakarta.mail.version}</version>\n            </dependency>\n\n\n            <!-- https://mvnrepository.com/artifact/jakarta.ejb/jakarta.ejb-api -->\n            <dependency>\n                <groupId>jakarta.ejb</groupId>\n                <artifactId>jakarta.ejb-api</artifactId>\n                <version>${jakarta.ejb.version}</version>\n            </dependency>\n            \n            <!-- https://mvnrepository.com/artifact/jakarta.jws/jakarta.jws-api -->\n            <dependency>\n                <groupId>jakarta.jws</groupId>\n                <artifactId>jakarta.jws-api</artifactId>\n                <version>${jakarta.jws-api.version}</version>\n            </dependency>\n            \n            <!-- https://mvnrepository.com/artifact/jakarta.activation/jakarta.activation-api -->\n            <dependency>\n                <groupId>jakarta.activation</groupId>\n                <artifactId>jakarta.activation-api</artifactId>\n                <version>${jakarta.activation-api.version}</version>\n            </dependency>       \n\n\n            <!-- https://mvnrepository.com/artifact/org.glassfish/jakarta.faces -->\n            <dependency>\n                <groupId>org.glassfish</groupId>\n                <artifactId>jakarta.faces</artifactId>\n                <version>${jakarta-faces.version}</version>\n            </dependency>                           \n                        \n\n            <!-- package\\fileUpload\\commons-fileupload-1.4.jar -->\n            <!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload -->\n            <dependency>\n                <groupId>commons-fileupload</groupId>\n                <artifactId>commons-fileupload</artifactId>\n                <version>${commons-fileupload.version}</version>\n            </dependency>\n\n            <!-- https://mvnrepository.com/artifact/org.quartz-scheduler/quartz -->\n            <!-- <dependency> -->\n            <!-- <groupId>org.quartz-scheduler</groupId> -->\n            <!-- <artifactId>quartz</artifactId> -->\n            <!-- <version>${org.quartz-scheduler.version}</version> -->\n            <!-- </dependency> -->\n\n            <!-- https://mvnrepository.com/artifact/opensymphony/quartz -->\n            <dependency>\n                <groupId>opensymphony</groupId>\n                <artifactId>quartz</artifactId>\n                <version>${org.quartz-scheduler.version}</version>\n            </dependency>\n\n            <!-- https://mvnrepository.com/artifact/org.quartz-scheduler/quartz -->\n            <!-- <dependency> 

Ste*_*n C 2

您的问题源于 Java EE 8 或更早版本与 Jakarta EE 9 或更高版本之间的不兼容性。

看起来 Apache Commons FileUpload 的最新官方版本仍然依赖于 Java EE API。然而,查看 GitHub 上的提交历史记录,这个提交:

旨在从 Java 代码中删除 Java EE 和 Jakarta EE 依赖项。因此,如果要在该提交时或之后查看源代码,您应该能够构建一个commons-fileupload在 Java EE 或 Jakarta EE 上运行的版本。

(注:我还没有尝试过。)

从字里行间,我预计该库很快就会发布新的正式版本。显然,Java EE 依赖性commons-fileupload是其他一些 Apache 基金会项目的障碍。


另一种选择是暂时将应用程序保留在 Java EE 8(或更早版本),并使用 GlassFish 5.1 或更早版本……这需要 Java 8 而不是 Java 11。