我已将旧版 Google 应用引擎从 Java 8 迁移到 11,但在使用 maven 命令运行本地开发服务器时遇到问题:
mvn appengine:run
我已将 pom.xml 文件中的所有依赖项更新为最新。我收到以下 java 错误:
[INFO] GCLOUD: java.lang.NoClassDefFoundError: jakarta/servlet/Filter
[INFO] GCLOUD: at java.base/java.lang.ClassLoader.defineClass1(Native Method)
[INFO] GCLOUD: at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1016)
[INFO] GCLOUD: at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:174)
[INFO] GCLOUD: at java.base/java.net.URLClassLoader.defineClass(URLClassLoader.java:555)
[INFO] GCLOUD: at java.base/java.net.URLClassLoader$1.run(URLClassLoader.java:458)
[INFO] GCLOUD: at java.base/java.net.URLClassLoader$1.run(URLClassLoader.java:452)
[INFO] GCLOUD: at java.base/java.security.AccessController.doPrivileged(Native Method)
[INFO] GCLOUD: at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:451)
[INFO] GCLOUD: at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:588)
[INFO] GCLOUD: at com.google.appengine.tools.development.IsolatedAppClassLoader.loadClass(IsolatedAppClassLoader.java:215)
[INFO] GCLOUD: at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
[INFO] GCLOUD: at org.eclipse.jetty.util.Loader.loadClass(Loader.java:64)
[INFO] GCLOUD: at org.eclipse.jetty.servlet.BaseHolder.doStart(BaseHolder.java:89)
[INFO] GCLOUD: at org.eclipse.jetty.servlet.ServletHolder.doStart(ServletHolder.java:369)
[INFO] GCLOUD: at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:73)
[INFO] GCLOUD: at org.eclipse.jetty.servlet.ServletHandler.lambda$initialize$0(ServletHandler.java:749)
[INFO] GCLOUD: at java.base/java.util.stream.SortedOps$SizedRefSortingSink.end(SortedOps.java:357)
[INFO] GCLOUD: at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:485)
[INFO] GCLOUD: at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474)
[INFO] GCLOUD: at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:312)
[INFO] GCLOUD: at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735)
[INFO] GCLOUD: at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:658)
[INFO] GCLOUD: at org.eclipse.jetty.servlet.ServletHandler.initialize(ServletHandler.java:774)
[INFO] GCLOUD: at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:379)
[INFO] GCLOUD: at org.eclipse.jetty.webapp.WebAppContext.startWebapp(WebAppContext.java:1449)
[INFO] GCLOUD: at org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1414)
[INFO] GCLOUD: at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:916)
[INFO] GCLOUD: at org.eclipse.jetty.servlet.ServletContextHandler.doStart(ServletContextHandler.java:288)
[INFO] GCLOUD: at org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:524)
[INFO] GCLOUD: at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:73)
[INFO] GCLOUD: at org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:169)
[INFO] GCLOUD: at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:110)
[INFO] GCLOUD: at org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:97)
[INFO] GCLOUD: at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:73)
[INFO] GCLOUD: at org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:169)
[INFO] GCLOUD: at org.eclipse.jetty.server.Server.start(Server.java:423)
[INFO] GCLOUD: at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:110)
[INFO] GCLOUD: at org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:97)
[INFO] GCLOUD: at org.eclipse.jetty.server.Server.doStart(Server.java:387)
[INFO] GCLOUD: at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:73)
[INFO] GCLOUD: at com.google.appengine.tools.development.jetty9.JettyContainerService.startContainer(JettyContainerService.java:366)
[INFO] GCLOUD: at com.google.appengine.tools.development.AbstractContainerService.startup(AbstractContainerService.java:293)
[INFO] GCLOUD: at com.google.appengine.tools.development.AutomaticInstanceHolder.startUp(AutomaticInstanceHolder.java:42)
[INFO] GCLOUD: at com.google.appengine.tools.development.AbstractModule.startup(AbstractModule.java:102)
[INFO] GCLOUD: at com.google.appengine.tools.development.Modules.startup(Modules.java:118)
[INFO] GCLOUD: at com.google.appengine.tools.development.DevAppServerImpl.doStart(DevAppServerImpl.java:284)
[INFO] GCLOUD: at com.google.appengine.tools.development.DevAppServerImpl.access$000(DevAppServerImpl.java:57)
[INFO] GCLOUD: at com.google.appengine.tools.development.DevAppServerImpl$1.run(DevAppServerImpl.java:233)
[INFO] GCLOUD: at com.google.appengine.tools.development.DevAppServerImpl$1.run(DevAppServerImpl.java:231)
[INFO] GCLOUD: at java.base/java.security.AccessController.doPrivileged(Native Method)
[INFO] GCLOUD: at com.google.appengine.tools.development.DevAppServerImpl.start(DevAppServerImpl.java:231)
[INFO] GCLOUD: at com.google.appengine.tools.development.DevAppServerMain$StartAction.apply(DevAppServerMain.java:405)
[INFO] GCLOUD: at com.google.appengine.tools.util.Parser$ParseResult.applyArgs(Parser.java:58)
[INFO] GCLOUD: at com.google.appengine.tools.development.DevAppServerMain.run(DevAppServerMain.java:258)
[INFO] GCLOUD: at com.google.appengine.tools.development.DevAppServerMain.main(DevAppServerMain.java:249)
[INFO] GCLOUD: Caused by:
[INFO] GCLOUD: java.lang.ClassNotFoundException: jakarta.servlet.Filter
[INFO] GCLOUD: at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:476)
pom.xml 文件:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<packaging>war</packaging>
<version>1.0</version>
<groupId>com.house.cards</groupId>
<artifactId>cardgamesserver</artifactId>
<properties>
<appengine.app.version>1</appengine.app.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<prerequisites>
<maven>3.6.1</maven>
</prerequisites>
<dependencies>
<!-- API, java.xml.bind module -->
<dependency>
<groupId>jakarta.xml.bind</groupId>
<artifactId>jakarta.xml.bind-api</artifactId>
<version>4.0.0</version>
</dependency>
<dependency>
<groupId>org.glassfish.jaxb</groupId>
<artifactId>jaxb-runtime</artifactId>
<version>4.0.2</version>
</dependency>
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-core</artifactId>
<version>4.0.2</version>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-impl</artifactId>
<version>4.0.2</version>
</dependency>
<dependency>
<groupId>javax.ws.rs</groupId>
<artifactId>javax.ws.rs-api</artifactId>
<version>2.1.1</version>
</dependency>
<dependency>
<groupId>com.google.appengine</groupId>
<artifactId>appengine-api-1.0-sdk</artifactId>
<version>2.0.14</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-servlet-core</artifactId>
<version>3.1.1</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-moxy</artifactId>
<version>3.1.1</version>
</dependency>
<dependency>
<groupId>com.googlecode.objectify</groupId>
<artifactId>objectify</artifactId>
<version>5.1.5</version>
</dependency>
</dependencies>
<build>
<outputDirectory>${project.build.directory}/${project.build.finalName}/WEB-INF/classes</outputDirectory>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>versions-maven-plugin</artifactId>
<version>2.1</version>
<executions>
<execution>
<phase>compile</phase>
<goals>
<goal>display-dependency-updates</goal>
<goal>display-plugin-updates</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<version>3.2</version>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>11</source>
<target>11</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.6</version>
</plugin>
<plugin>
<groupId>com.google.cloud.tools</groupId>
<artifactId>appengine-maven-plugin</artifactId>
<version>2.4.4</version>
<configuration>
<projectId>cardgamesserver</projectId>
<version>1</version>
<cloudSdkVersion>429.0.0</cloudSdkVersion>
<gcloudMode>beta</gcloudMode>
</configuration>
</plugin>
</plugins>
</build>
</project>
任何关于我缺少让本地主机服务器运行的帮助都会非常有帮助。 谢谢 蒂姆
我发现我需要一整套 5 个 Glassfish 依赖项才能使其正常工作,并删除了其他一些依赖项。下面全套(对于我的基本应用程序):
<dependencies>
<!-- Compile/runtime dependencies -->
<dependency>
<groupId>javax.ws.rs</groupId>
<artifactId>javax.ws.rs-api</artifactId>
<version>2.1.1</version>
</dependency>
<dependency>
<groupId>com.google.appengine</groupId>
<artifactId>appengine-api-1.0-sdk</artifactId>
<version>2.0.14</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-servlet</artifactId>
<version>2.31</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.core</groupId>
<artifactId>jersey-client</artifactId>
<version>2.31</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.inject</groupId>
<artifactId>jersey-hk2</artifactId>
<version>2.31</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-servlet-core</artifactId>
<version>2.31</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-moxy</artifactId>
<version>2.31</version>
</dependency>
<dependency>
<groupId>com.googlecode.objectify</groupId>
<artifactId>objectify</artifactId>
<version>5.1.5</version>
<!--<version>6.0.7</version> -->
</dependency>
</dependencies>