TristenC 发表于 2021-11-24 15:04

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

整个SpringBoot项目在IDEA中通过Spring Initializer创建
"spring-boot-devtools"的scope已经是compile(原始值是runtime,特地修改后来测试打完包后是否包含该依赖,结果改或不改都不包含)
"spring-boot-maven-plugin"也只是在打包时排除了lombok的依赖
可是打好的fat jar(可运行jar)的"BOOT-INF/lib"目录里并没有devtools的jar


POM.xml中"spring-boot-devtools"的依赖声明:

<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"插件声明:

<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>

a13005746827 发表于 2021-11-24 15:04

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

<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

这个打完包后还有用吗,不是在开发阶段热部署方便用的吗?{:17_1080:}

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>标签,感谢大佬!

a13005746827 发表于 2021-11-24 21:00

TristenC 发表于 2021-11-24 20:27
我说呢,之前就推测应该是spring-boot-maven-plugin默认排除了devtools,就是不知道是怎么排除的,原来还 ...

问题解决了悬赏记得给我啊 :Dweeqw

chengxuyuan01 发表于 2021-11-27 09:39

<scope>compile</scope>
你这个域是不是指定了只能再编译时提供啊
页: [1]
查看完整版本: 【Java】SpringBoot项目打包后的jar中为何没有devtools