公司项目前端要求不高,直接用了jsp画简单的页面,前后端不分离。而且部署的话采用的是部署到tomcat上面。因为部署的时候遇到一些奇怪的问题,这里总结一下,简单说下部署流程。
1.一开始我解决的办法是将打成的jar包直接运行,然后报错。第二次是将打包好的jar包解压,然后变成war包一样的文件目录。虽然我认为是一模一样了但是还是报错,所以也不行。然后我好奇到底是哪里不一样或者是哪里出了问题,一开始看到了pom文件里的打包配置。这是一部分。
<build> <finalName>${project.artifactId}</finalName> <resources> <resource> <directory>src/main/java</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> </includes> </resource> <resource> <directory>src/main/resources</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> </includes> </resource> <resource> <directory>src/main/webapp</directory> <targetPath>META-INF/resources</targetPath> <includes> <include>**/*.*</include> </includes> </resource> <resource> <directory>src/filePackage</directory> <includes> <include>**/*.*</include> </includes> </resource> <!-- <resource> <directory>src/main/webapp</directory> <includes> <include>**/*.*</include> </includes> </resource> --> </resources>
红色的部分代表的只是将diretory目录的内容在编译和打包的时候保存在你所设定的打包路径下的指定文档,并不影响打包。打包/编译路径在哪里,在这里设置。
这是父级,整个项目的默认
这是子模块的
第一个是跟着父级的,一个是自定义的。
然后还有个疑问是,项目部署的时候,到底是如何寻找依赖的
首先是tomcat固定的一个web工程目录,webapp下的web-inf,里面的lib文件放所需依赖,这个在打成war包的时候会自动生成。
1.如果是这种自己的jar包,要不就是修改本地maven,然后pom文件导入,然后打包他就会自动识别了。
2.要不就是,设置一些配置。
(1)如何添加外部jar包?
(2)如何打包外部jar包?
题外话:最近把Spring/Spring扩展点实战系列写完之后,就不知道要写哪方面的文章了,大家对什么感兴趣,可以留言~
一、添加外部jar包
准备一个外部jar包,比如api.jar:
在项目路径下创建一个文件夹libs,将api.jar放到libs下。
添加外部jar依赖:
<dependency>
<groupId>com.kfit</groupId>
<artifactId>api</artifactId>
<version>1.0.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/libs/api.jar</systemPath>
</dependency>
添加完之后,代码中就可以使用到该jar里的类和方法。
说明:
(1)groupI、artifactId、version随便填写,并不一定要和api.jar的信息,但肯定是要一定的规范和关联性会比较好了。
(2)scope=system表示此依赖是来自外部jar,而不是maven仓库。当scope设置为system时,systemPath属性才会生效,systemPath为一个物理文件路径,来指定依赖的jar其物理磁盘的位置。
(3)${project.basedir}代表根目录。
二、打包外部jar包
上面哪一步仅仅是引用到了项目里,打包的时候是不会打包到jar/war中的。对于Spring Boot的项目,一般都会使用到打包插件,那么只需要添加一个配置即可,如下:
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<includeSystemScope>true</includeSystemScope>
</configuration>
</plugin>
说明:重要的是includeSystemScope为true。
如果有些配置文件,并非Spring Boot的默认路径,那么可能就需要借助resouce配置(resources节点和plugins节点同级):
<resources>
<resource>
<!-- directory 表示取该目录下的文件 -->
<directory>libs</directory>
<!--targetPath 指定打包到哪个目录下 默认是放到class目录下-->
<targetPath>/BOOT-INF/lib/</targetPath>
<!-- 取符合格式的所有文件 *代表全部 -->
<includes>
<include>**/*.jar</include>
</includes>
</resource>
</resources>
总结
(1)如何添加外部jar包:指定score=system,并且配置sysemPath。
(2)如何打包外部jar包:使用spring-boot-maven-plugin,并且配置属性includeSystemScope为true。
SpringBoot添加外部jar包及打包(亲测有效) - 第452篇 - 知乎
接下来就是如何打war包呢。
首先是排除springboot自带的tomcat
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
然后修改一下启动类
设置打包格式为war包
<packaging>war</packaging>
搞定
之前的jar包解压之后变成web目录报错的原因找到了,启动类不一样。
其他的按照web目录结构去放资源就没问题了。
所以jsp前后端不分离springoot部署到tomcat的话:
1:war包生成的目录文件
2:生成的war包
3:jar包解压之后设置成web目录,启动类得替换(还不如不用)
还有个问题就是
1.jar包整合jsp文件启动
SpringBoot集成jsp,打包成jar包,可访问jsp页面
在打包部署项目中遇到了SpringBoot集成jsp,访问报404,在网上找了一些解决方案,实测可行之后,整理了一下。
环境:idea2018、jdk8
为什么springboot集成jsp,访问会404.在springboot版本2.1.4中集成jsp,打完包访问界面会报404错误,我当时仔细找了一下原因,是因为springboot2.1.4的打包插件不支持jsp。用1.4版本打的jar包是没有问题的,当然ide工具运行也是没有问题的,所以你想用springboot2.1.4版本,在spring-boot-maven-plugin指定版本为1.4就可以了。其他的东西都是一样的。
在pom文件中加入jsp依赖支持
2.jar包是如何自动找依赖的。