Maven打包SpringBoot多modules项目依赖问题

2024-09-01 03:18

本文主要是介绍Maven打包SpringBoot多modules项目依赖问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

SpringBoot默认打包是可执行的jar包,其他模块无法引用,原因:

spring-boot工程打包编译时,会生成两种jar包,一种是普通的jar,另一种是可执行jar。默认情况下,这两种jar的名称相同,在不做配置的情况下,普通的jar先生成,可执行jar后生成,所以可执行jar会覆盖普通的jar。

在plugin配置spring-boot-maven-plugin中增加如下配置,这样可以打可执行jar包和普通jar包:

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

假如是test模块提示错误(通常做junit单元测试时会引用其他模块的代码),可以直接跳过test,有以下三种设置可以跳过test模块:

  • mvn clean package -DskipTests
  • mav clean package -Dmaven.test.skip=true
  • 在spring-boot-maven-plugin中配置:
<plugins>   <plugin>   <groupId>org.apache.maven.plugins</groupId>   <artifactId>maven-compile-plugin</artifactId>     <configuration>   <skipTests>true</skipTests>    </configuration>   </plugin>   </plugins>   

注:Spring Boot 打包成的可执行 jar ,为什么不能被其他项目依赖
Springboot项目maven多模块拆分

Maven创建空项目
新增Maven项目然后点击next,填写项目信息后生成Maven项目然后把项目中无用的文件和文件夹直接删掉,
在这里插入图片描述

在这里插入图片描述
然后在往空项目中添加需要的module模块。

注:其实Maven空项目也可以通过创建任意一个Maven项目然后删除不必要文件,只保留POM文件就可以。

空项目自定义文件夹下新增项目:
在这里插入图片描述
然后指定对应的module存放目录:
在这里插入图片描述

子项目POM继承父项目POM的versionId和groupId
如:在这里插入图片描述
jar包的META-INF文件夹中会生成一个pom.properties文件,文件中有jar包的生成信息和versionId、artifactId、groupId等
在这里插入图片描述
注:maven项目的pom文件如果没有指定packaging默认是jar。 另外两种打包类型war和pom需要指定(pom类型什么也不会生成)。

Maven打出jar包的三种类型:

  1. normal jar: 普通的jar,用于项目依赖引入,不能通过java -jar xx.jar执行,一般不包含其它依赖的jar包。
  2. fat jar: 也叫做uber jar,是一种可执行的jar(executable jar),既包含自己代码中的class ,也包含第三方依赖的jar。
  3. 不可执行,但包含第三方依赖的jar包,避免生成的jar与第三方引入后出现依赖版本冲突。

注:打出各种包的plugin配置

POM文件中的内置属性(Maven预定义可以直接使用):

 ${basedir} 项目根目录${version} 表示项目版本;${project.basedir} 同${basedir};${project.version} 表示项目版本,与${version}相同;${project.build.directory} 构建目录,缺省为target;${project.build.sourceEncoding} 表示主源码的编码格式;${project.build.sourceDirectory} 表示主源码路径;${project.build.finalName} 表示输出文件名称;${project.build.outputDirectory} 构建过程输出目录,缺省为target/classes

SpringBoot打包部署过程:

使用spring-boot-maven-plugin插件打包SpringBoot应用的配置

  • spring-boot:run 运行你的Springboot应用
  • spring-boot:repackage 将mvn package 生成的 jar或者war 重新打包成可执行文件,同时修改原文件名,增加.origin 后缀
  • spring-boot:start 与 spring-boot:stop 用来管理Springboot应用的生命周期(例如,mvn integration-test 集成测试阶段)
  • spring-boot:build-info 生成构建信息build-info.properties 可供Actuator 使用

SpringBoot插件指定配置:

	<build><plugins><!-- ... --><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>2.1.5.RELEASE</version><configuration><mainClass>${start-class}</mainClass><layout>ZIP</layout></configuration><executions><execution><goals><goal>repackage</goal></goals></execution></executions></plugin><!-- ... --></plugins></build>

然后使用mvn package spring-boot:repackage 命令进行打包

maven引用lombok和mapstruct依赖时问题

			<!-- 如果 scope 为 provided 可能导致启动之后报错, Mapper 找不到 --><dependency><groupId>org.mapstruct</groupId><artifactId>mapstruct-jdk8</artifactId><version>${org.mapstruct.version}</version></dependency><dependency><groupId>org.mapstruct</groupId><artifactId>mapstruct-processor</artifactId><version>${org.mapstruct.version}</version></dependency><!-- lombok可以设置provided --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>${lombok.version}</version><scope>provided</scope></dependency>

idea - maven子工程找不到父工程pom

应该先构建父项目,再构建子项目。因为子项目依赖于父项目。即父项目先install到本地(pom引用项目的顺序是先从本地仓库开始查找)

这篇关于Maven打包SpringBoot多modules项目依赖问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1125788

相关文章

JVM 的类初始化机制

前言 当你在 Java 程序中new对象时,有没有考虑过 JVM 是如何把静态的字节码(byte code)转化为运行时对象的呢,这个问题看似简单,但清楚的同学相信也不会太多,这篇文章首先介绍 JVM 类初始化的机制,然后给出几个易出错的实例来分析,帮助大家更好理解这个知识点。 JVM 将字节码转化为运行时对象分为三个阶段,分别是:loading 、Linking、initialization

Spring Security 基于表达式的权限控制

前言 spring security 3.0已经可以使用spring el表达式来控制授权,允许在表达式中使用复杂的布尔逻辑来控制访问的权限。 常见的表达式 Spring Security可用表达式对象的基类是SecurityExpressionRoot。 表达式描述hasRole([role])用户拥有制定的角色时返回true (Spring security默认会带有ROLE_前缀),去

浅析Spring Security认证过程

类图 为了方便理解Spring Security认证流程,特意画了如下的类图,包含相关的核心认证类 概述 核心验证器 AuthenticationManager 该对象提供了认证方法的入口,接收一个Authentiaton对象作为参数; public interface AuthenticationManager {Authentication authenticate(Authenti

Spring Security--Architecture Overview

1 核心组件 这一节主要介绍一些在Spring Security中常见且核心的Java类,它们之间的依赖,构建起了整个框架。想要理解整个架构,最起码得对这些类眼熟。 1.1 SecurityContextHolder SecurityContextHolder用于存储安全上下文(security context)的信息。当前操作的用户是谁,该用户是否已经被认证,他拥有哪些角色权限…这些都被保

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

Java架构师知识体认识

源码分析 常用设计模式 Proxy代理模式Factory工厂模式Singleton单例模式Delegate委派模式Strategy策略模式Prototype原型模式Template模板模式 Spring5 beans 接口实例化代理Bean操作 Context Ioc容器设计原理及高级特性Aop设计原理Factorybean与Beanfactory Transaction 声明式事物

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

Java进阶13讲__第12讲_1/2

多线程、线程池 1.  线程概念 1.1  什么是线程 1.2  线程的好处 2.   创建线程的三种方式 注意事项 2.1  继承Thread类 2.1.1 认识  2.1.2  编码实现  package cn.hdc.oop10.Thread;import org.slf4j.Logger;import org.slf4j.LoggerFactory

每天认识几个maven依赖(ActiveMQ+activemq-jaxb+activesoap+activespace+adarwin)

八、ActiveMQ 1、是什么? ActiveMQ 是一个开源的消息中间件(Message Broker),由 Apache 软件基金会开发和维护。它实现了 Java 消息服务(Java Message Service, JMS)规范,并支持多种消息传递协议,包括 AMQP、MQTT 和 OpenWire 等。 2、有什么用? 可靠性:ActiveMQ 提供了消息持久性和事务支持,确保消