idea打包jib_具有Jib和IntelliJ IDEA的Spring DevTools

idea打包jib

我最近一直在开发Spring Boot应用程序,为了加快开发速度,我添加了Developer Tools作为依赖项。

默认情况下,只有在稍后以调试模式运行时,才可以更新在HotSpot JVM中加载的类,并且仅对于有关方法实现的更改。 这意味着向类添加属性需要完全重新启动。

DevTools是对它的改进。 它通过调整标准的类加载机制来工作:一个类加载器专用于库,另一种类用于项目的类。 如果某个类发生了更改,并且无法通过HotSpot重新加载它,则无需重新启动整个JVM,而是直接丢弃第二个类加载器,然后再次加载所有类。 由于与库和JDK中的类数量相比,项目中的类数量非常少,因此与完全重启相比,此方法非常快。 另外,从保持会话,缓存等中受益。

所有这些都可以缩短开发周期。 它也可以免费替代JRebel-尽管仅限于基于Spring Boot的项目。

问题

为了在Docker容器中分发Spring Boot应用程序,我使用了Maven Jib插件 。 Jib能够创建Docker映像,而无需任何Docker运行时!

因为Jib是Maven插件,所以已将其插入Maven配置,并且可以推断出很多东西。 包括主类和JAR依赖项。 因此,默认值使用专用的java命令创建Docker映像, 例如

java-cp /app/resources:/app/classes:/app/libs/ *\
     ch.frankel.boot.zerodowntime.ZeroDowntimeApplicationKt

因此,它不是分发的可执行JAR,而只是目录结构。 主要好处是,构建生命周期可以将自身限制在编译阶段。 因此,执行Maven Spring Boot插件既不必要也不有用。

运行完全打包的应用程序时,将自动禁用开发人员工具。 如果您的应用程序是从java -jar启动的,或者是从特殊的类加载器启动的,则将其视为“生产应用程序”。

不幸的是,由于该应用程序未作为JAR运行,因此DevTools JAR本身包含在映像依赖项中。 这样可以远程访问该应用程序 。 有理由允许这样做,但在所有其他情况下,应将其视为安全问题。

让我们修复它。

解决方案

第一步是将DevTools JAR隔离到专用的Maven配置文件中:

pom.xml
<profiles>
  <profile>
    <id> dev </id>
    <dependencies>
      <dependency>
        <groupId> org.springframework.boot </groupId>
        <artifactId> spring-boot-devtools </artifactId>
        <scope> runtime </scope>
      </dependency>
    </dependencies>
  </profile>
</profiles>

现在,可以使用此配置文件,希望只能在开发期间使用。 但是,Maven配置文件是在构建时而非运行时应用的 。 因此,在IntelliJ IDEA中,更改运行配置的设置无济于事。

而是转到Maven视图,找到“ Profiles项,然后检查相关项。

如何在IntelliJ IDEA中激活Maven配置文件

此时,每个基于IntelliJ的构建都将使用包含DevTools的dev配置文件,而最终的基于Jib的Docker映像则不会。

翻译自: https://blog.frankel.ch/spring-devtools-jib-intellij-idea/

idea打包jib

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值