【问题标题】:Spring-boot jersey maven failed to run war fileSpring-boot jersey maven无法运行war文件
【发布时间】:2015-05-22 21:23:52
【问题描述】:

我们正在创建一个 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 文件夹在那里。

【问题讨论】:

    标签: java maven spring-boot war


    【解决方案1】:

    好的,找到了解决方案。 我有一个 jersery 配置类,我在其中添加了所有带有 packages() 的控制器类。 当我将其注释掉并将其更改为 register("controller.class") 它开始工作!

        @Configuration
        @ApplicationPath("/path")
        @Controller 
        public class JerseyConfig extends ResourceConfig {
            public JerseyConfig() {
                register(MultiPartFeature.class);
               register(OneController.class);
              //packages("com.controllers");
            }
        }
    
    #

    更新

    #
    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);
          });
     }
    

    }

    #

    使用此解决方案,您可以通过包扫描获取球衣注册中的所有控制器。

    【讨论】:

    猜你喜欢
    • 2020-02-04
    • 2020-08-12
    • 2017-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-01
    • 2018-11-12
    • 2019-06-12
    相关资源
    最近更新 更多