【问题标题】:Maven unzip spring boot executable jarMaven解压spring boot可执行jar
【发布时间】:2017-11-21 07:05:04
【问题描述】:

我需要解压缩一个 Spring Boot 可执行 jar 作为我的 maven 构建的一部分。

我尝试了两种方法,一种是使用maven-dependency-plugin,第二种是maven-antrun-plugin。两个插件都静默不输出任何内容。

我去调试maven-dependency-plugin,似乎用于解压缩jar的库无法理解可执行的jar格式。 我知道 spring-boot 可执行 jar 不是常规存档(因为它嵌入了一个 shell 脚本)。

我的问题是,如何使用 maven 从 jar 中提取文件?

我认为 exec-maven-pluginunzip 命令的组合会起作用,但这会使我的构建不可移植,所以我想避免它。

编辑: 这是antrun插件的输出:

    $ mvn antrun:run@unpack-jar
    ...
    [INFO]
    [INFO] --- maven-antrun-plugin:1.8:run (unpack-jar) @ subscriber-rpm ---
    [INFO] Executing tasks

    main:
        [unzip] Expanding: D:\path\conf.jar into D:\path\target\config
    [INFO] Executed tasks
    [INFO] ------------------------------------------------------------------------
    [INFO] BUILD SUCCESS
    [INFO] ------------------------------------------------------------------------

然而,D:\path\target\config 甚至没有被创建。 maven-dependency 插件也有类似的结果。

【问题讨论】:

  • 依赖插件有什么错误?解压后需要重新打包吗?
  • @PanulNUK 没有错误,依赖插件根本看不到 jar 的内容。我认为重新打包与问题无关,但是是的,我确实在之后使用 rpm 插件重新打包了提取的文件。
  • 你为什么还要提取它?感觉就像你在做一些你一开始就不应该做的事情。
  • 我需要提取一个属性文件,这样我就可以修改配置而无需重新组装jar。

标签: maven spring-boot jar maven-dependency-plugin maven-antrun-plugin


【解决方案1】:

我认为您应该做的是,您可以为每个环境使用多个配置文件。 这是documention。这是 MKYONG 的一个例子。

https://www.mkyong.com/spring-boot/spring-boot-profiles-example/

如果配置在属性文件/yaml 中,你可以在运行时修改它,当你像这样传递参数时:

/usr/bin/java -Dcom.webmethods.jms.clientIDSharing=true -jar myapp.jar

如果您仍然喜欢打开 jar,您可以尝试用正则表达式替换所有 shell 脚本数据,然后您会得到可以在 winzip 或 7zip 中打开的普通 jar。(您的方法现在可以使用)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-03
    • 1970-01-01
    • 2018-05-26
    • 2014-12-18
    • 2019-05-04
    • 2018-02-25
    • 2016-07-10
    相关资源
    最近更新 更多