zoukankan      html  css  js  c++  java
  • IDEA Spring boot Maven打包发布

    1、在pom.xml中如果要打war包,必须加上该行代码。

    <packaging>war</packaging>

    2、pom.xml中继续加入以下代码:该代码用于spring boot中内嵌的tomcat包依赖排除,不然会产生冲突。

    <exclusions>
       <exclusion>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-tomcat</artifactId>
       </exclusion>
    </exclusions>
    

    3、pom.xml中继续加入以下依赖:该代码用于开发时使用spring boot内嵌tomcat进行调试,生产时使用外部tomcat

    scope里的provided意思是只用于开发及测试阶段。

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-tomcat</artifactId>
        <scope>provided</scope>
    </dependency>
    

      

    4、找到项目中的application 然后让该类继承SpringBootServletInitializer,然后重写configure方法,如下图所示:

    到这里,目前项目中需要打包配置的步骤已经完成,接下来进行打包

    1、点击idea右边的maven(通过菜单View->Tool Windows->Maven Projects打开)-》你的项目名-》Lifecycle-》双击package

    如果要引入外部手工导入的包,也要一起打包生成,则需要做以下的操作:

    ==================================================================================

    1.前言
            SpringBoot和Maven的出现给我们的开发提供了很大的方便,正所谓事物都有两面性,有简便的地方就会有麻烦的地方,这里记录了一次使用Maven打包SpringBoot项目的时候出现的一个引用本地第三方jar包的问题。

    2.问题描述
            一个SpringBoot项目,平时引用第三方jar包的时候,在pom文件里指定好该jar包的依赖就可以了,这本就是maven的一个很正常的操作,配置好依赖,maven自动将相应的jar包加入工程里,开发的时候就可以直接引入jar包内的类和方法,打包的时候maven还会将依赖的jar包打入到WEB-INF/lib下,皆大欢喜,多么开心~
            但总有那么个项目,由于一些列原因,必须要引入其他人提供给你的jar包,这些包是公有仓库上不存在的,如果有私服的还好,没有私服的就开始头疼了。
            有人说了,在本地maven仓库中新建目录,自定义一个路径把jar包放进去,然后在pom.xml里加上对应的<dependency>配置就可以了吧!这样的确是可以了,但这种方式不利于项目团队开发和工程源代码留存,并不能做到下载下来的工程代码直接就能编译运行的效果,所以考虑到代码的完整性,这个方案pass掉了。
            通过查阅一些相关资料,发现在<dependency>中使用<systemPath>就可以做到引用第三方jar包的效果,然后在spring-boot-maven-plugin中设置includeSystemScope为true就可以了,像下面这样:

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
    
        <groupId>com.st.springboot</groupId>
        <artifactId>ingredients-java</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <packaging>war</packaging>
        
        <name>ingredients-java</name>
        
    	<dependencies>
    		<dependency>
    	        <groupId>org.bouncycastle</groupId>
    	        <artifactId>bcprov-jdk16</artifactId>
    	        <version>1.46</version>
    	        <scope>system</scope>
    	        <systemPath>${project.basedir}/src/main/resources/jar/bcprov-jdk16-1.46.jar</systemPath>
    	    </dependency>
        </dependencies>
    	<build>
    		<plugins>
    			<plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                    <configuration>
                        <includeSystemScope>true</includeSystemScope>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    </project> 
    

      

     设置完了非常开心,如果用的是idea,甚至还能看到IDE连包里的内容都能显示:

    本以为皆大欢喜了,然而在程序开发完毕,打包部署的时候出现了问题,发现引用的本地jar包压根就打不进WEB-INF的lib目录下,jar包还在工程原来的位置放着了!

    3.解决问题
            时间紧迫,先把所有引用的jar包往war包的lib目录下放进去吧,这么做确实好使,war包成功部署上去了。但一直这样不行啊,根本问题没有解决,万一有朝一日打算设置个maven定时自动打包部署什么的不就凉凉了……
            继续查阅资料寻找解决方法,终于功夫不负有心人,maven提供了插件专门解决打war包的时候引用本地包的问题,这东西叫做maven-war-plugin!
    于是我的pom.xml变成了下面这样子:

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
    
        <groupId>com.st.springboot</groupId>
        <artifactId>ingredients-java</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <packaging>war</packaging>
        
        <name>ingredients-java</name>
        
    	<dependencies>
    		<dependency>
    	        <groupId>org.bouncycastle</groupId>
    	        <artifactId>bcprov-jdk16</artifactId>
    	        <version>1.46</version>
    	        <scope>system</scope>
    	        <systemPath>${project.basedir}/src/main/resources/jar/bcprov-jdk16-1.46.jar</systemPath>
    	    </dependency>
        </dependencies>
    	<build>
    		<plugins>
    			<plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                    <configuration>
                        <includeSystemScope>true</includeSystemScope>
                    </configuration>
                </plugin>
                <!-- 下面是为了将本地jar包打入WEB-INF/lib下而增加的配置-->
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-war-plugin</artifactId>
                    <version>3.2.2</version>
                    <configuration>
                        <webResources>
                            <resource>
                            	<!-- 指向的是包含你所有要用jar包的目录 -->
                                <directory>${project.basedir}/src/main/resources/jar</directory> 
                                <!-- 编译后要把这些jar包复制到的位置 -->
                                <targetPath>WEB-INF/lib</targetPath>  
                            </resource>
                        </webResources>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    </project> 
    

      

    配置完后,再次运行package命令,发现本地的jar包完美的打进了WEB-INF/lib下,到此问题解决了!

    另外还有个需要注意的地方,由于使用的是maven-war-plugin,因此打jar包的时候不适用哦~

    ==================================================================================

    点击运行控制台会打印打包的过程信息,主要看最后是不是显示成功。如果成功,说明前面步骤没问题。

    如果失败了,那么请再次检查上面的步骤以及注意的事项。

    2、如下图打开target,打好的包就在该目录下,名称为项目名-0.0.1-SNAPSHOT.war,首先把名字改一下,改成ROOT.war,

    改名字为ROOT主要是不用打项目名,在服务器上测试直接可以localhost加端口号加你的项目登录路径就能打开系统页面。

    我们祭出ctrl+c,ctrl+v大法把该war包放到桌面,再移动到腾讯云服务器的tomcat中去。

    包已经打好,那么我们接下来到服务器的tomcat中操作

      首先一定要确保tomcat可以正常启动

    1、将war包移动到腾讯云服务器tomcat目录下的webapps中,不需要解压,不需要任何操作。

          如果webapps目录中有ROOT文件夹,删除即可。

    2、启动tomcat

    现在解释为什么一定要tomcat9.0版本,因为我们的war包中默认打的tomcat的lib包为9.0版本

    如图所示:如果我们尝试放在tomcat别的版本上,启动tomcat控制台就会报各种异常。

    按道理是可以改版本的,但是由于太懒,所以没去找解决方案。。。

    最后跑完看一下控制台,看看是否有报错,然后在服务器的本地上进行测试吧。

    如果改名字为ROOT.war,在服务器上测试直接可以localhost+端口号+你的项目登录路径就能打开系统页面。

    如:localhost:8080/sys/login

    如果没改名字,还是原来项目名.war,在服务器上测试直接可以localhost+端口号+你的项目名+登录路径就能打开系统页面。

    如:localhost:8080/项目名/sys/login

    如果你们服务器上测试也没问题了,那么就要公网测试了,这个就不多说了,服务器能跑起来公网的问题其实注意两点就行

    1、腾讯云注意安全组开放端口,这里建议开放80端口的那个选项,然后把该服务器添加到安全组中,之后把tomcat的端口改成80。

    2、安全组开放了之后有可能还不能公网访问,那么就是防火墙的问题了,把防火墙关闭即可。

      

  • 相关阅读:
    NYOJ 132(最长回文子串)
    NYOJ 148(斐数求余)
    NYOJ 97
    NYOJ 206
    NYOJ 520(最大素因子的序数)
    数据库大型应用解决方案总结(转)
    SQL好的写法(转)
    WebService如何调试及测试工具
    刪除windows服務方法
    GhostDoc(注释生成工具)使用方法
  • 原文地址:https://www.cnblogs.com/lpq21314/p/13194847.html
Copyright © 2011-2022 走看看