我们正在创建一个 spring-boot jersey 应用程序。
现在我们要创建可执行的 war 文件。
问题是当我运行它时应用程序运行良好
mvn spring-boot:run
但是当我尝试将其打包为 war 并使用 java -jar ABD.war 运行它时
它给出以下错误
Caused by: java.io.FileNotFoundException: /Users/ABC/ABD-0.0.1-SNAPSHOT.war!/WEB-INF/classes (No such file or directory)
Caused by: org.glassfish.jersey.server.internal.scanning.ResourceFinderException:
这是我正在使用的 pom.xml 部分,
<packaging>war</packaging>
.
.
.
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<org.slf4j.version>1.7.7</org.slf4j.version>
<maven-compiler-plugin.version>3.1</maven-compiler-plugin.version>
<java.version>1.8</java.version>
</properties>
.
.
.
.
.
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
尽管当我解压 war 文件时,我可以看到 WEB-INF/classes 文件夹就在那里。
好的找到了解决方案。
我有一个球衣配置类,我在其中添加了所有带有 packages() 的控制器类。
当我将其注释掉并将其更改为 register("controller.class") 它开始工作!
@Configuration
@ApplicationPath("/path")
@Controller
public class JerseyConfig extends ResourceConfig {
public JerseyConfig() {
register(MultiPartFeature.class);
register(OneController.class);
//packages("com.controllers");
}
}
#
Update
#
private static final Logger logger = LoggerFactory.getLogger(OneController.class);
public JerseyConfig() {
scan("com.somepackages");
}
public void scan(String... packages) {
for (String pack : packages) {
Reflections reflections = new Reflections(pack);
reflections.getTypesAnnotatedWith(Path.class)
.parallelStream()
.forEach((clazz) -> {
logger.info("New resource registered: " + clazz.getName());
register(clazz);
});
}
}
#
通过此解决方案,您可以通过包扫描获取球衣寄存器中的所有控制器。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)