開始認爲這個問題比較少見,不事後面才發現實際上是兩個很細微的問題致使的不能直接添加到tomcat中。java
問題描述: 直接建立的spring boot 項目在ecplise navigator 視圖下能夠看到項目目錄結構以下圖:web
這時候哪怕在pom.xml中設置了<packaging>war</packaging> 去掉內嵌tomcat,再將啓動器修改成SpringBootServletInitializer但也只是得到了項目的war包,雖然說能夠在tomcat中使用,但若是想直接在eclipse中 部署到tomcat中進行調試系統的話,仍是不行。能夠在tomcat 上add and remove中發現沒有springboot 項目。 這個緣由是由於ecplise直接建立的springboot 項目並非一個web項目。spring
解決方案: 第1步.項目上右擊 properties -> project facets 而後配置:Dynamic Web Module 和Java 將項目轉變爲javaweb項目。注意要去掉Cloud Foundry Standalone Applicationapache
而後就能夠在tomcat 中看到該項目了,但還沒完。tomcat
第2: 完成第一步以後,項目結構變成了:springboot
能夠看得出自動在.settings下爲咱們新增了許多文件,其中最重要的即是org.eclipse.wst.common.component,這個文件是ecplise控制項目資源的路徑。app
<?xml version="1.0" encoding="UTF-8"?><project-modules id="moduleCoreId" project-version="1.5.0"> <wb-module deploy-name="ProjectName"> <wb-resource deploy-path="/" source-path="/WebContent" tag="defaultRootSource"/> <wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/java"/> <wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/resources"/> <wb-resource deploy-path="/WEB-INF/classes" source-path="/src/test/java"/> <property name="context-root" value="ProjectName"/> <property name="java-output-path" value="/ProjectName/target/classes"/> </wb-module> </project-modules>
將配置修改成:eclipse
<?xml version="1.0" encoding="UTF-8"?><project-modules id="moduleCoreId" project-version="1.5.0"> <wb-module deploy-name="ProjectName"> <wb-resource deploy-path="/" source-path="/src/main/webapp" tag="defaultRootSource"/> <wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/java"/> <wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/resources"/> <wb-resource deploy-path="/WEB-INF/classes" source-path="/src/test/java"/> <wb-resource deploy-path="/WEB-INF/classes" source-path="/src/test/resources"/> <wb-resource deploy-path="/WEB-INF/lib" source-path="/target/ProjectName/WEB-INF/lib"/> <property name="context-root" value="/"/> <property name="java-output-path" value="/ProjectName/target/ProjectName/WEB-INF/classes"/> </wb-module> </project-modules>
其中 WebContent 是對應項目中被自動新增的WebContent目錄,其對應爲tomcat中webapp項目的根目錄。能夠按照須要進行修改。須要注意的是要在其下添加META-INF、MANIFEST.MF 和WEB-INF 及web.xmlwebapp
以上配置最主要的是將target/ProjectName/WEB-INF/lib中的jar lib 輸出到WEB-INF/lib。主要是因爲自動配置中,沒有指明項目的lib輸出路徑。而這個路徑是由pom.xml文件中的build節指定:maven
<build> <finalName>${project.name}</finalName> <outputDirectory>${project.basedir}\target\${project.name}\WEB-INF\classes</outputDirectory> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.8</source> <target>1.8</target> <skip>true</skip> <!-- true:跳過測試 --> <encoding>UTF-8</encoding> <compilerArguments> <extdirs>${project.basedir}\src\main\webapp\WEB-INF\lib</extdirs> </compilerArguments> </configuration> </plugin> </plugins> </build>
最後,打開咱們的.classpath修改配置爲:
<?xml version="1.0" encoding="UTF-8"?> <classpath> <classpathentry kind="src" output="target/ProjectName/WEB-INF/classes" path="src/main/java"> <attributes> <attribute name="optional" value="true"/> <attribute name="maven.pomderived" value="true"/> </attributes> </classpathentry> <classpathentry excluding="**" kind="src" output="target/ProjectName/WEB-INF/classes" path="src/main/resources"> <attributes> <attribute name="maven.pomderived" value="true"/> </attributes> </classpathentry> <classpathentry kind="src" output="target/ProjectName/WEB-INF/test-classes" path="src/test/java"> <attributes> <attribute name="optional" value="true"/> <attribute name="maven.pomderived" value="true"/> </attributes> </classpathentry> <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"> <attributes> <attribute name="maven.pomderived" value="true"/> </attributes> </classpathentry> <classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER"> <attributes> <attribute name="maven.pomderived" value="true"/> </attributes> </classpathentry> <!-- <classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.web.container"/> 注意,若是還須要使用spring-boot run的方式,請註釋該節,測試是能夠不影響項目正常使用的。具體緣由和該節的做用還未找到說明文檔。 --> <classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.module.container"/> <classpathentry kind="output" path="target/ProjectName/WEB-INF/classes"/> </classpath>
以上配置主要是爲設置classes的目錄。起到熱更新的效果。
這種將spring boot 項目遷移爲ecplise + tomcat 運行方式特不雅觀,但也將就能用。但願後面能找到相對優雅的遷移方案。
若是存在WebContent下的資源須要打包到tomcat,能夠參考另外一篇博客