直接建立的spring boot 項目的ecplise+tomcat運行方案

開始認爲這個問題比較少見,不事後面才發現實際上是兩個很細微的問題致使的不能直接添加到tomcat中。java

問題描述: 直接建立的spring boot 項目在ecplise navigator 視圖下能夠看到項目目錄結構以下圖:web

springboot 項目配置結構

這時候哪怕在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,能夠參考另外一篇博客

普通java項目改進爲maven:ecplise

相關文章
相關標籤/搜索