直接创建的spring boot 项目的ecplise+tomcat运行方案

开始认为这个问题比较少见,不过后面才发现其实是两个很细微的问题导致的不能直接添加到tomcat中。

问题描述: 直接创建的spring boot 项目在ecplise navigator 视图下可以看到项目目录结构如下图:

springboot 项目配置结构

这时候哪怕在pom.xml中设置了<packaging>war</packaging> 去掉内嵌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控制项目资源的路径。

<?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>

将配置修改为:

<?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.xml

以上配置最主要的是将target/ProjectName/WEB-INF/lib中的jar lib 输出到WEB-INF/lib。主要是由于自动配置中,没有指明项目的lib输出路径。而这个路径是由pom.xml文件中的build节指定:

	<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

转载于:https://my.oschina.net/yuyizyk/blog/1932722

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值