maven多模块项目打包war包或者jar包

序言:

前两篇博客给大家介绍了如何用maven搭建一个多模块的项目,包括整合mybatis。附上地址:
基础模块搭建:https://blog.csdn.net/bicheng4769/article/details/83387389
集合mybtais:https://blog.csdn.net/bicheng4769/article/details/83413726
经过前两篇博客的学习,我相信大家都已经知道如何搭建一个多模块的项目了,接下的代码都是在模块上进行增删改查之类的操作,当完成项目之后,我们需要将模块进行打包部署,那么maven多模块项目中的打包该如何操作呢?

打包jar包:

jar包时springboot推荐的打包方式,这种类型的文件直接java -jar 文件名 就可以直接运行。

  • 添加maven插件:

    首先第一步在项目的pom.xml文件中添加 maven插件:

     
         
             
                 org.springframework.boot
                 spring-boot-maven-plugin
             
         
     
    

    都知道要添加插件,但关键在于添加在什么地方。我们可以想一想,最终我们需要打包的文件是什么?是web项目,所以我们将maven插件添加到web模块中(也就是除了根pom之外的,最顶级的模块pom文件)。
    这里给大家解释下为什么不能放在父pom.xml文件中,首先我们来试一下放在父pom文件中会出现什么问题:

     [INFO] demo ............................................... SUCCESS [  1.615 s]
     [INFO] demo-dao ........................................... FAILURE [  2.496 s]
     [INFO] demo-service ....................................... SKIPPED
     [INFO] demo-web ........................................... SKIPPED
     [INFO] ------------------------------------------------------------------------
     [INFO] BUILD FAILURE
     [INFO] ------------------------------------------------------------------------
     [INFO] Total time: 4.845 s
     [INFO] Finished at: 2018-11-02T16:15:37+08:00
     [INFO] Final Memory: 37M/335M
     [INFO] ------------------------------------------------------------------------
     [ERROR] Failed to execute goal org.springframework.boot:spring-boot-maven-plugin:2.0.6.RELEASE:repackage (default) on project demo-dao: Execution default of goal org.springframework.boot:spring-boot-maven-plugin:2.0.6.RELEASE:repackage failed: Unable to find main class -> [Help 1]
    

    Unable to find main class
    在父pom中声明插件之后,子模块都会继承插件(dependencyManagementdependencies的区别)。所以在运行插件时,dao模块、service模块都是没有主函数,所以会报错。针对这种情况,其实是有方法去解决的,这里我就不介绍(其实是楼主不会。。。。。)

  • 运行哪个pom.xml 文件:

    我都试了下,不管是web模块还是父模块都可以运行成功, 但我还是建议执行web模块中的pom进行打包。

  • 文件在哪里:

    文件最终在 web模块中的target目录下。

打包 war包:

  1. 父pom需要一些设置:

     pom
    
  2. web层添加maven插件,并且设置打包为war包:

       war
       
       	
       		
       			org.springframework.boot
       			spring-boot-maven-plugin
       		
       	
       
    
  3. 依赖包作为jar包打包:

    其他模块中添加如下设置:

    jar
    
  4. 去除springboot 内置tomcat服务器:

     
          org.springframework.boot
          spring-boot-starter-web
          
          
              
                  org.springframework.boot
                  spring-boot-starter-tomcat
              
          
      
    
  5. 加入tomcat支持:

     
         org.springframework.boot
         spring-boot-starter-tomcat
         provided
     
    
  6. 修改启动类,将DemoApplication.java继承SpringBootServletInitializer并重写configure方法:

    @SpringBootApplication()
    @MapperScan("com.cj.demo.dao")
    public class DemoApplication  extends SpringBootServletInitializer {
        @Override
        protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
            return builder.sources(DemoApplication.class);
        }
        public static void main(String[] args) {
            SpringApplication.run(DemoApplication.class);
        }
    }
    
  7. 打包:

    不管在总pom或者web层都可以进行到打包。

    打包的war包都在web层的target文件下。复制粘贴到tomcat的webapps下启动就可以访问。

总结:

总体而言,maven分模块和maven不分模块进行打包基本没什么区别,jar包没什么好说的,都一样的。war包也就是去除tomcat服务器之类的配置,唯一需要注意的是在依赖的模块中需要加入jar配置。仔细想想也挺有道理的,我们先把依赖的模块打包成jar包,然后在web模块中进行引入,然后再进行使用。
下载地址:
demo-war

你可能感兴趣的:(java,springboot,maven)