吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1305|回复: 8
收起左侧

[求助] 【Java】SpringBoot项目打包后的jar中为何没有devtools

  [复制链接]
TristenC 发表于 2021-11-24 15:04
25吾爱币
整个SpringBoot项目在IDEA中通过Spring Initializer创建
"spring-boot-devtools"的scope已经是compile(原始值是runtime,特地修改后来测试打完包后是否包含该依赖,结果改或不改都不包含)
"spring-boot-maven-plugin"也只是在打包时排除了lombok的依赖
可是打好的fat jar(可运行jar)的"BOOT-INF/lib"目录里并没有devtools的jar
1.png

POM.xml中"spring-boot-devtools"的依赖声明:
[XML] 纯文本查看 复制代码
<dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-devtools</artifactId>
      <scope>compile</scope>
    <optional>true</optional>
</dependency>


POM.xml中用于打fat jar(可运行jar)的"spring-boot-maven-plugin"插件声明:
[XML] 纯文本查看 复制代码
<build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>
        </plugins>
</build>

最佳答案

查看完整内容

你使用的是spring-maven-plugin 对spring项目进行编译,插件在编译时期默认会自动排除spring-devtool包,你可以在pom.xml 中配置参数选择性不排除devtool 参考如下,留意excludeDevtools 参数

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

a13005746827 发表于 2021-11-24 15:04
你使用的是spring-maven-plugin 对spring项目进行编译,插件在编译时期默认会自动排除spring-devtool包,你可以在pom.xml 中配置参数选择性不排除devtool
参考如下,留意excludeDevtools 参数
[XML] 纯文本查看 复制代码
<plugin>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-maven-plugin</artifactId>
	<configuration>
	    <fork>true</fork>
	    <includeSystemScope>true</includeSystemScope>
	    <excludeDevtools>false</excludeDevtools>
	</configuration>
</plugin>
kolan9527 发表于 2021-11-24 16:36
你的依赖中已经写明了  <scope>compile</scope> 表明  了作用域,只在编译期起作用,打包后肯定是不会包括了,而且打包后也没有必要使用这个依赖,这个开发时期热更新使用的
zjf123ww 发表于 2021-11-24 16:50
这个打完包后还有用吗,不是在开发阶段热部署方便用的吗?
Vvvvvoid 发表于 2021-11-24 17:42
devtools 是开发的时候使用的一些热部署/yml代码提示之类的插件,打包后用那玩意 没用啊
 楼主| TristenC 发表于 2021-11-24 20:10
kolan9527 发表于 2021-11-24 16:36
你的依赖中已经写明了  compile 表明  了作用域,只在编译期起作用,打包后肯定是不会包括了,而且打包后也 ...

compile作用域是编译期起作用我知道,它还有个作用就是值为compile的依赖在打那种包含已声明依赖的jar包时会包含进去(打jar包时根据所使用maven插件的不同,打成的jar有的只包含项目本身的class,而有的除了项目本身的class还会将项目所依赖的jar也包含进来,spring-boot-maven-plugin这个maven插件所打的jar恰恰就属于后者,不然所打成的jar包中也不会有那一系列依赖);devtools作用是热更新(实际是自动重启不算完全意义的热更新)我也知道,打包后没必要包含它也是理所当然的,我只是奇怪在满足了会被包含进所打jar包的条件下为何它没有被打进jar包中,这只是一个学习过程中自己突然冒出的一个思考,不用考虑devtools的意义
 楼主| TristenC 发表于 2021-11-24 20:27
a13005746827 发表于 2021-11-24 17:52
你使用的是spring-maven-plugin 对spring项目进行编译,插件在编译时期默认会自动排除spring-devtool包,你 ...

我说呢,之前就推测应该是spring-boot-maven-plugin默认排除了devtools,就是不知道是怎么排除的,原来还有个<excludeDevtools>标签,感谢大佬!
2.png
a13005746827 发表于 2021-11-24 21:00
TristenC 发表于 2021-11-24 20:27
我说呢,之前就推测应该是spring-boot-maven-plugin默认排除了devtools,就是不知道是怎么排除的,原来还 ...

问题解决了悬赏记得给我啊
chengxuyuan01 发表于 2021-11-27 09:39
<scope>compile</scope>
你这个域是不是指定了只能再编译时提供啊
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止回复与主题无关非技术内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-5-13 07:05

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表