我试图让以下项目在独立的 Jetty 实例中运行:
https
://github.com/stilkov/jetty-weld-jersey-sample
运行提到的 Maven 目标 jetty:run 按预期工作。
我正在使用 Jetty_9_4_28_v20200408(提到的项目使用不同的版本 - 我测试了更新 pom.xml 中提到的 Jetty 版本,我仍然能够运行 jetty:run)。我修改了 pom.xml 以反映独立服务器所需的更改:
<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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.innoq.sample</groupId>
<artifactId>jetty-weld-jersey-sample</artifactId>
<version>0.1-SNAPSHOT</version>
<packaging>war</packaging>
<name>Jetty Weld Jersey Sample Web App</name>
<properties>
<jettyVersion>9.4.28.v20200408</jettyVersion>
<weldVersion>2.2.9.Final</weldVersion>
<jerseyVersion>2.6</jerseyVersion>
<JerseyGlassfishCDIVersion>2.6</JerseyGlassfishCDIVersion>
</properties>
<dependencies>
<dependency>
<groupId>javax.inject</groupId>
<artifactId>javax.inject</artifactId>
<version>1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.ws.rs</groupId>
<artifactId>javax.ws.rs-api</artifactId>
<version>2.0.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.jboss.weld.servlet</groupId>
<artifactId>weld-servlet</artifactId>
<version>${weldVersion}</version>
<type>jar</type>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-servlet</artifactId>
<version>${jerseyVersion}</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.containers.glassfish</groupId>
<artifactId>jersey-gf-cdi</artifactId>
<version>${JerseyGlassfishCDIVersion}</version>
<scope>runtime</scope>
</dependency>
</dependencies>
</project>
但是,这会导致启动时出现以下错误(从 IntelliJ 启动 Jetty):
[2020-05-13 11:44:23,833] Artifact jetty-weld-jersey-sample:war: Artifact is being deployed, please wait...
2020-05-13 23:44:25.512:WARN:oejw.WebAppContext:Scanner-1: Failed startup of context o.e.j.w.WebAppContext@6a6c5585{/jetty-weld-jersey-sample-0.1-SNAPSHOT,file:///$PROJECT_DIR/jetty-weld-jersey-sample-master/target/jetty-weld-jersey-sample-0.1-SNAPSHOT/,UNAVAILABLE}{$PROJECT_DIR/jetty-weld-jersey-sample-master/target/jetty-weld-jersey-sample-0.1-SNAPSHOT.war}
java.lang.ArrayStoreException: sun.reflect.annotation.TypeNotPresentExceptionProxy
at sun.reflect.annotation.AnnotationParser.parseClassArray(AnnotationParser.java:724)
at sun.reflect.annotation.AnnotationParser.parseArray(AnnotationParser.java:531)
at sun.reflect.annotation.AnnotationParser.parseMemberValue(AnnotationParser.java:355)
at sun.reflect.annotation.AnnotationParser.parseAnnotation2(AnnotationParser.java:286)
at sun.reflect.annotation.AnnotationParser.parseAnnotations2(AnnotationParser.java:120)
at sun.reflect.annotation.AnnotationParser.parseAnnotations(AnnotationParser.java:72)
at java.lang.Class.createAnnotationData(Class.java:3521)
at java.lang.Class.annotationData(Class.java:3510)
at java.lang.Class.getAnnotation(Class.java:3415)
at org.eclipse.jetty.annotations.AnnotationConfiguration.createServletContainerInitializerAnnotationHandlers(AnnotationConfiguration.java:574)
at org.eclipse.jetty.annotations.AnnotationConfiguration.configure(AnnotationConfiguration.java:343)
at org.eclipse.jetty.webapp.WebAppContext.configure(WebAppContext.java:498)
at org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1404)
at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:838)
at org.eclipse.jetty.servlet.ServletContextHandler.doStart(ServletContextHandler.java:275)
at org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:524)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:72)
at org.eclipse.jetty.deploy.bindings.StandardStarter.processBinding(StandardStarter.java:46)
at org.eclipse.jetty.deploy.AppLifeCycle.runBindings(AppLifeCycle.java:188)
at org.eclipse.jetty.deploy.DeploymentManager.requestAppGoal(DeploymentManager.java:513)
at org.eclipse.jetty.deploy.DeploymentManager.addApp(DeploymentManager.java:154)
at org.eclipse.jetty.deploy.providers.ScanningAppProvider.fileAdded(ScanningAppProvider.java:173)
at org.eclipse.jetty.deploy.providers.WebAppProvider.fileAdded(WebAppProvider.java:447)
at org.eclipse.jetty.deploy.providers.ScanningAppProvider$1.fileAdded(ScanningAppProvider.java:66)
at org.eclipse.jetty.util.Scanner.reportAddition(Scanner.java:784)
at org.eclipse.jetty.util.Scanner.reportDifferences(Scanner.java:753)
at org.eclipse.jetty.util.Scanner.scan(Scanner.java:641)
at org.eclipse.jetty.util.Scanner$1.run(Scanner.java:558)
at java.util.TimerThread.mainLoop(Timer.java:555)
at java.util.TimerThread.run(Timer.java:505)
[2020-05-13 11:44:25,904] Artifact jetty-weld-jersey-sample:war: Artifact is deployed successfully
[2020-05-13 11:44:25,905] Artifact jetty-weld-jersey-sample:war: Deploy took 2,072 milliseconds
如果我开始激活更多的 Jetty 模块,我可能会遇到不同的错误,但我的直觉认为这可能不是必需的。
注意:在日志中,我介绍了 $PROJECT_DIR 用于匿名化。