【发布时间】:2017-06-05 19:17:11
【问题描述】:
使用 springboot 1.5.3 和 tomcat 8 和 8.5。我有一个自定义的 Spring Boot 项目,我将其用作依赖项。这只是回购课程。在我的主要课程中,我添加了
<dependency>
<groupId>com.swisher</groupId>
<artifactId>product-common</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
到我的 pom.xml 文件。它工作得很好,但是当我将项目打包为可部署的 war 文件并推送到 Tomcat 8 或 8.5 时,我的依赖项项目模型类对我的控制器不可见。
2017-06-05 14:21:57.157 错误 5184 --- [nio-8080-exec-6] os.boot.web.support.ErrorPageFilter:由于异常 [com] 从请求 [/] 转发到错误页面/swisher/pc/model/Person]
java.lang.NoClassDefFoundError: com/swisher/pc/model/Person 在 com.swisher.pc.controllers.CatalogController.index(CatalogController.java:75) ~[classes/:0.0.1-SNAPSHOT]
我试过了
@SpringBootApplication(scanBasePackages={ "com.swisher", "com.swisher.pc"})
@ComponentScan(basePackages={"com.swisher", "com.swisher.pc"})
但仍然无法正常工作。
任何帮助将不胜感激。
凯文
【问题讨论】:
-
如何打包您的应用程序?你是使用默认的 maven spring boot 插件还是使用程序集或其他 maven 插件做一些自定义的东西?
-
我使用默认的maven来构建war文件。我相信这是一个类路径问题,而不是包扫描问题。如果我有一个用作依赖项的 Spring Boot 应用程序,是否需要特定的配置?
-
从 Spring Suite 中...如果我将项目作为 Spring Boot 运行。它工作正常。它可以解决依赖类..这是一个简单的pojo。将“{[/goodbye]}”映射到公共 com.test.model.Person com.example.demo.controller.MainController.getPersonObj()。但是当我使用 mvn spring-boot:run 运行项目时。我的原因是:java.lang.NoClassDefFoundError: com/test/model/Person @user3780135
-
您是否在另一个 Maven 项目中使用 Spring Boot 应用程序作为依赖项?由于 Spring Boot 插件将类文件打包到生成的 JAR/WAR 中的方式,这不起作用。如果您需要这些类作为依赖项,请将它们移动到另一个模块,然后您可以将其用作依赖项。
-
谢谢!本文进一步解释 [链接]github.com/spring-projects/spring-boot/issues/… 这是由于 Spring Boot 1.4 中可执行 jar 的布局发生了变化。应用程序类现在打包在 BOOT-INF/classes 中所以 pom 中的这个条目就可以了。
标签: spring-boot jar tomcat8