【问题标题】:Spring Boot Maven Plugin and requiresUnpack target directorySpring Boot Maven Plugin 和 requiresUnpack 目标目录
【发布时间】:2019-04-17 11:45:53
【问题描述】:

我有一个案例需要使用以下方法解压库:

spring-boot:repackage:requiresUnpack

否则,项目中的其他库将无法正常工作。如链接中所述,所选库已解压缩并复制到临时目录。如果我想让应用程序运行的时间长于临时文件的到期时间,那么将库解压到临时目录并不是一个好主意。文件将被删除,应用程序将停止正常工作。

  • 有没有办法指定不同的目标目录?
  • 临时位置是应用程序库的好地方,有什么原因吗?

到目前为止,我能够通过覆盖 TMPTEMP 环境变量来更改位置目标位置,但从长远来看,这听起来很糟糕。

在这里获得任何帮助。

【问题讨论】:

  • 是什么导致你解压这个库?鉴于 spring-boot 是按惯例实现的,并且此步骤超出了惯例,我个人对您的问题的解决方案是找出不需要解包库的解决方案。
  • outputDirectory 用于定位目标 jar 文件,而不是运行时解压库的位置; @Kieveli 此功能由 spring-boot docs.spring.io/spring-boot/docs/current/reference/html/… 支持,完全适合我需要使用的情况;不幸的是,我正在处理我无法更改的专有库
  • 我仍然对需要解压它的原因感到好奇——但如果你不想分享,那也没关系。我的 spring-boot 作为 Tomcat 实例运行。使用 tomcat,它经常使用临时空间来运行 Web 应用程序。这并不意味着临时文件夹将被任意删除。您是否遇到过在 Web 服务运行时解压的库被删除的问题?
  • 我无法分享有关库的详细信息(保密),但它需要解包才能正常工作。是的,当应用程序突然停止工作(10 天后)并出现类似 ClassNotFound 的异常时,我在生产环境中遇到了这个问题。

标签: java spring maven spring-boot spring-boot-maven-plugin


【解决方案1】:

这个问题不仅仅针对“requiresUnpack”,这是 spring-boot/tomcat 处理其临时文件的方式。因此,在其他领域也可能会让您感到惊讶。

描述该行为存在问题:https://github.com/spring-projects/spring-boot/issues/5009

解决方法:

  • 使用server.tomcat.basedir 定义Tomcat 基目录。如果未指定,则使用临时目录。
  • 使用-Djava.io.tmpdir=/var/tmp 以不同的临时目录启动应用程序。

另一种解决方案是不解压缩您的库。不要将它存储在你的 fat jar 中,而是将它存储在类路径中的某个位置。

【讨论】:

  • 我会选择-Djava.io.tmpdir=[location],也许将来会有其他方式来配置它:github.com/spring-projects/spring-boot/issues/15180
  • @GrzegorzGajos 您是否也将临时位置附加到类路径中?将预期的 jar 解包后,应用程序如何找到它们?我的意思是,jar 必须在类路径上可用,对吧?
  • @ds459 应用程序/Tomcat 正在默认目录中寻找它们。这是开箱即用的行为。我不必将临时位置附加到类路径。
猜你喜欢
  • 2015-08-01
  • 1970-01-01
  • 2017-07-30
  • 2016-04-11
  • 2020-06-09
  • 2023-03-17
  • 2017-08-24
  • 2022-01-16
  • 1970-01-01
相关资源
最近更新 更多