maven - Wildfly swarm - 找不到页面错误
问题描述
这是我拥有的 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>hu.javacity.app.buildingsofcities</groupId>
<artifactId>city</artifactId>
<name>WildFly Swarm Example</name>
<version>1.0.0-SNAPSHOT</version>
<packaging>war</packaging>
<properties>
<version.wildfly.swarm>2018.4.1</version.wildfly.swarm>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<failOnMissingWebXml>false</failOnMissingWebXml>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.wildfly.swarm</groupId>
<artifactId>bom-all</artifactId>
<version>${version.wildfly.swarm}</version>
<scope>import</scope>
<type>pom</type>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<finalName>demo</finalName>
<plugins>
<plugin>
<groupId>org.wildfly.swarm</groupId>
<artifactId>wildfly-swarm-plugin</artifactId>
<version>${version.wildfly.swarm}</version>
<executions>
<execution>
<goals>
<goal>package</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
<dependencies>
<!-- Java EE 7 dependency -->
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>7.0</version>
<scope>provided</scope>
</dependency>
<!-- WildFly Swarm Fractions -->
</dependencies>
</project>
这将是 HelloWorldEndpoint.java
package hu.javacity.app.buildingsofcities.city.rest;
import javax.ws.rs.Path;
import javax.ws.rs.core.Response;
import javax.ws.rs.GET;
import javax.ws.rs.Produces;
@Path("/hello")
public class HelloWorldEndpoint {
@GET
@Produces("text/plain")
public Response doGet() {
return Response.ok("Hello from WildFly Swarm!").build();
}
}
运行 Maven 后,它说:“WildFly Swarm 已准备就绪”并且我没有收到任何错误所以我尝试在以下位置写入以下 URL:localhost:8080/hello 结果是以下消息:“未找到”我尝试使用 Edge、Firefox或Chrome,但没有成功。
解决方案
所以这里有几个问题。首先,您缺少JAX-RS
Swarm 分数。这意味着您pom.xml
需要的依赖项如下所示:
<dependencies>
<!-- Java EE 7 dependency -->
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>7.0</version>
<scope>provided</scope>
</dependency>
<!-- WildFly Swarm Fractions -->
<dependency>
<groupId>org.wildfly.swarm</groupId>
<artifactId>jaxrs</artifactId>
</dependency>
</dependencies>
现在是第二个问题。在2018.4.1
Wildfly Swarm 版本中,swarm 团队删除了javax.ws.rs.core.Application
标准 JAX-RS 应用程序所需的自动生成(有关更多信息,请参阅此博客)。如果您尝试在其中启动代码,2018.4.1
则会收到警告:
WFLYRS0015:没有为 JAX-RS 应用程序找到 Servlet 声明。在 demo.war 中,要么提供一个扩展 javax.ws.rs.core.Application 的类,要么在 web.xml 中声明一个 servlet 类。
而且您的应用程序不起作用。所以你有两种选择来解决这个问题。第一个是2018.3.1
像它一样使用自动生成。然而,这是一个糟糕的修复,因为在未来,Swarm 可能会继续2018.4.1
发布的行为。所以要修复它,你需要添加你自己的javax.ws.rs.core.Application
,看起来像:
package hu.javacity.app.buildingsofcities.city.rest;
import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;
@ApplicationPath("/")
public class RestApplication extends Application {
// intentionally empty
}
这将您的JAX-RS
路径设置为/
. 一个常见的模式是使用类似/rest
或的东西,/svc
但现在这对你来说很好。