场景

最近在学习使用Jenkins自动化部署分布式微服务的时候,需要将微服务打成Jar包发送到服务器制作成镜像供Jenkins拉取运行,了解到 spring-boot-maven-plugin 插件可以完成Maven工程的打包任务。

问题

直接在父pom文件引入如下插件将会导致Maven打的微服务Jar包不会将外部依赖导入其中,且其他模块在依赖本模块的时候可能出现找不到类的报错。即无法通过 java -jar xxx.jar 命令来启动服务。

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

原因

spring-boot-maven-plugin 打出来的Jar包默认是不可依赖的,需要进行一些额外的配置。
比如一个微服务工程中,往往会抽取出来一个 common 公共模块,在 common 公共模块中使用了 spring-boot-maven-plugin 的默认配置build,其他依赖了 common 模块的比如 provider 或者 order 在使用打包命令进行打包时就会出错,错误是在 provider 或者 order 中找不到 common 中的类,原因就是此插件默认默认打包出来的Jar是不可依赖的。

解决方案

在父工程pom文件和公共模块pom文件做一些修改

<!-- 父pom --><build><plugins><!-- 资源文件拷贝插件 --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-resources-plugin</artifactId><configuration><encoding>UTF-8</encoding></configuration></plugin><!-- Java编译插件 --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><source>1.8</source><target>1.8</target><encoding>UTF-8</encoding></configuration></plugin><!-- maven打包插件 --><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><executions><execution><goals><goal>repackage</goal></goals></execution></executions></plugin></plugins></build><!-- common pom --><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><!-- 这个属性为可执行jar包的名字后缀 --><configuration><classifier>exec</classifier></configuration></plugin></plugins></build><!-- 其余子模块会继承父模块 -->

配置完后在进行 mvn clean package 或者 mvn clean install 命令打包服务后,可用 java -jar xxx.jar 正常启动。

其他细节

在使用 spring-boot-maven-plugin 插件进行打包操作的时候强烈建议指明JDK版本,不然可能在使用了一些Java8新特性的时候可能受到类似不识别Lambda,请使用Resource8这样的错误。

<properties><java.version>1.8</java.version><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target></properties>

原文参考:
https://blog.csdn.net/DamonREN/article/details/85091900

Maven构建分布式项目时子模块相互依赖打包技巧相关推荐

  1. maven多项目打包报错---子模块相互依赖打包时所遇到的问题:依赖的程序包找不到 package xxx does not exist

    场景: springboot 项目多模块已成开发大势所趋,抽出一个parent父工程,子模块基础模块(包含一些公用的实体类和工具类等),以及其他子模块(Module A. Module B -).Mo ...

  2. maven 打包时缺少文件_maven父子工程---子模块相互依赖打包时所遇到的问题:依赖的程序包找不到...

    场景: 因为之前用到的是,基于springboot框架所搭建的maven工程,而且都是相互独立的.现研发经理要求将所有工程进行整合和规范化,所以抽出一个parent父工程,base基础模块(包含一些公 ...

  3. android simple-xml,使用Maven构建Android项目-dexer在simple-xml依赖项上失败

    我有绝对空的Android项目生成 mvn archetype:generate -DarchetypeArtifactId=android-quickstart ....... 它构建良好,部署合理 ...

  4. 解决maven打jar包时不把依赖打包进去的问题

    百度的一群人就知道复制粘贴,全是不能用的,垃圾 首先lib目录要与src目录平级,然后去pom.xml替换<build>标签里的内容(不愿意替换的话复制粘贴也行),注意修改内容 <b ...

  5. 转】用Maven构建Mahout项目

    原博文出自于: http://blog.fens.me/hadoop-mahout-maven-eclipse/ 感谢! 用Maven构建Mahout项目 Hadoop家族系列文章,主要介绍Hadoo ...

  6. 用Maven构建Mahout项目

    Hadoop家族系列文章,主要介绍Hadoop家族产品,常用的项目包括Hadoop, Hive, Pig, HBase, Sqoop, Mahout, Zookeeper, Avro, Ambari, ...

  7. 使用Maven构建Java项目

    使用Maven构建Java项目 本指南将引导您使用Maven构建一个简单的Java项目. 你会建立什么 您将创建一个提供一天中时间的应用程序,然后使用Maven进行构建. 你需要什么 约15分钟 最喜 ...

  8. Maven构建java项目

    本篇文章,我们会教你如何用maven创建一个java项目,学会如何导入到eclipse中,将该java项目打包成一个jar文件并成功执行. 关于maven:它是apache基金会推出的一个项目管理工具 ...

  9. 设置maven 参数调休_IDEA 使用 Maven构建Spark项目

    上一篇讲了普通构建spark项目 这次分享用Maven构建Spark项目,中间遇到了很多坑!其根本原因是Scala 与 Spark的版本不一致! 本次环境: Java1.8 Scala 2.11.8 ...

最新文章

  1. lamp配置python_LAMP自动化安装脚本
  2. JavaScript执行环境及作用域(一)——执行环境栈和作用域链机制
  3. 深入浅出Android系统启动流程
  4. selenium在页面中多个fream的定位
  5. java元婴期(30)----java进阶(springmvc(4)---参数绑定(下)springmvc校验异常处理)
  6. 长春理工计算机学院保研外校,长春理工大学计算机科学技术学院(专业学位)软件工程保研...
  7. js中输出变量的类型和输出对象的的属性/方法/成员函数
  8. svn locked解决方法
  9. python读取多个sheet文件_PythonPandas excel文件如何一次读取所有工作表,并再次写入多个工作表?,pythonpandasexcel,一次性,全部,sheet,重新...
  10. r语言regexpr函数_R语言学习笔记-文本挖掘之字符处理(1)
  11. Think in Java第四版 读书笔记6第12章 异常处理
  12. apache通过rewrite限制某个目录
  13. Django验证码——手机注册登录
  14. android 仿新浪微博转发 评论悬浮框的功能
  15. 计算机语言圆周率,使用Java如何计算圆周率
  16. 如何创建WordPress登陆页面模板
  17. 微软上海C+AI(OC)
  18. 创业粉去哪里引流?如何精准引流创业粉?创业粉的引流技巧
  19. PreScan 教程:1. 建立新场景
  20. day34-数据分析与Excel

热门文章

  1. php 附近的距离,PHP查询附近的人及其距离的实现方法_PHP
  2. Python字符串| isdigit()方法与示例
  3. oracle底层执行顺序,select语句结构与执行顺序-Oracle
  4. uniapp接收服务器消息,【教程】uniapp websocket实现消息推送
  5. range函数python_range()函数以及Python中的示例
  6. Spring 事务失效的 8 种场景!
  7. HashMap 中的一个“坑”!
  8. Js实现动态插入删除文本框
  9. centos 8 安装使用配置
  10. mybatis进行CRUD操作时返回值不为影响的条数,为null