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

16 篇文章 1 订阅
1 篇文章 0 订阅

序言:

前两篇博客给大家介绍了如何用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插件:

     <build>
         <plugins>
             <plugin>
                 <groupId>org.springframework.boot</groupId>
                 <artifactId>spring-boot-maven-plugin</artifactId>
             </plugin>
         </plugins>
     </build>
    

    都知道要添加插件,但关键在于添加在什么地方。我们可以想一想,最终我们需要打包的文件是什么?是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需要一些设置:

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

       <packaging>war</packaging>
       <build>
       	<plugins>
       		<plugin>
       			<groupId>org.springframework.boot</groupId>
       			<artifactId>spring-boot-maven-plugin</artifactId>
       		</plugin>
       	</plugins>
       </build>
    
  3. 依赖包作为jar包打包:

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

    <packaging>jar</packaging>
    
  4. 去除springboot 内置tomcat服务器:

     <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-web</artifactId>
          <!-- 移除嵌入式tomcat插件 -->
          <exclusions>
              <exclusion>
                  <groupId>org.springframework.boot</groupId>
                  <artifactId>spring-boot-starter-tomcat</artifactId>
              </exclusion>
          </exclusions>
      </dependency>
    
  5. 加入tomcat支持:

     <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-tomcat</artifactId>
         <scope>provided</scope>
     </dependency>
    
  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服务器之类的配置,唯一需要注意的是在依赖的模块中需要加入<packaging>jar</packaging>配置。仔细想想也挺有道理的,我们先把依赖的模块打包成jar包,然后在web模块中进行引入,然后再进行使用。
下载地址:
demo-war

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值