开始认为这个问题比较少见,不过后面才发现其实是两个很细微的问题导致的不能直接添加到tomcat中。
问题描述: 直接创建的spring boot 项目在ecplise navigator 视图下可以看到项目目录结构如下图:
这时候哪怕在pom.xml中设置了war 去掉内嵌tomcat,再将启动器修改为SpringBootServletInitializer但也只是获得了项目的war包,虽说可以在tomcat中使用,但如果想直接在eclipse中 部署到tomcat中进行调试系统的话,还是不行。可以在tomcat 上add and remove中发现没有springboot 项目。 这个原因是因为ecplise直接创建的springboot 项目并不是一个web项目。
解决方案: 第1步.项目上右击 properties -> project facets 然后配置:Dynamic Web Module 和Java 将项目转变为javaweb项目。注意要去掉Cloud Foundry Standalone Application
然后就可以在tomcat 中看到该项目了,但还没完。
第2: 完成第一步之后,项目结构变成了:
可以看得出自动在.settings下为我们新增了许多文件,其中最重要的便是org.eclipse.wst.common.component,这个文件是ecplise控制项目资源的路径。
将配置修改为:
其中 WebContent 是对应项目中被自动新增的WebContent目录,其对应为tomcat中webapp项目的根目录。可以按照需要进行修改。需要注意的是要在其下添加META-INF、MANIFEST.MF 和WEB-INF 及web.xml
以上配置最主要的是将target/ProjectName/WEB-INF/lib中的jar lib 输出到WEB-INF/lib。主要是由于自动配置中,没有指明项目的lib输出路径。而这个路径是由pom.xml文件中的build节指定:
${project.name}
${project.basedir}\target\${project.name}\WEB-INF\classes
org.springframework.boot
spring-boot-maven-plugin
org.apache.maven.plugins
maven-compiler-plugin
1.8
1.8
true
UTF-8
${project.basedir}\src\main\webapp\WEB-INF\lib
最后,打开我们的.classpath修改配置为:
以上配置主要是为设置classes的目录。起到热更新的效果。
这种将spring boot 项目迁移为ecplise + tomcat 运行方式特不雅观,但也将就能用。希望后面能找到相对优雅的迁移方案。
如果存在WebContent下的资源需要打包到tomcat,可以参考另一篇博客