33

如何application.properties在远程 Linux 服务器上的现有 jar 文件中编辑属性文件(如 )。

想象一下 jar 位于/home/user/my-spring-boot.jar,我喜欢将用户名更改为application.propertiresfrom

username=foo

username=bar

如何打开文件并更改属性?

4

8 回答 8

60

.jar文件只是.zip具有不同扩展名的文件,可以vim直接编辑 zip 文件及其内容!简单地说,使用文件导航器找到您的属性文件并进行更改vim。将使用您的编辑来维护 zip。.jarvim

有关更多详细信息,请参见此处

于 2012-09-25T14:55:46.023 回答
3

可能的方法是将 jar 复制到 zip 文件中,提取,更改属性,压缩为 zip 并重命名为 jar

cp myJar.jar myJar.zip
unzip myJar.zip
vim myProperties.properties (doing the change here)
zip allMyFiles into myJar.zip
cp myJar.zip myModifiedJar.jar
于 2012-09-25T14:53:43.533 回答
3

更改现有的 JAR 工件不是一个好主意。相反,Spring Boot 允许您以多种方式轻松地使用外部值覆盖捆绑的属性。

例如,您可以application.properties在 JAR 旁边放置一个文件,其中包含您想要覆盖的值。您甚至不需要将整个属性文件复制到那里,只需要复制您想要更改的属性,因为它仍然会退回到捆绑的默认值。

详细信息记录在这里:

https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html

于 2018-01-03T16:06:35.553 回答
2

您可以这样做emacs(在复制文件进行备份之后):

$ cp /home/user/bigExecutableJar.jar /home/user/bigExecutableJar.jar.bak 
$ emacs /home/user/bigExecutableJar.jar
  • 如果文件很大,它会询问您是否真的要打开文件。
  • 然后,您可以在列出 jar 中所有文件的缓冲区中搜索要修改的文件;如果需要,请使用C-s进行搜索。
  • 通过选择文件打开文件,然后按RET
  • 进行更改,并使用C-x C-s.
  • 最后用 . 关闭 Emacs C-x C-c
于 2012-09-25T14:58:48.003 回答
1

使用 emacs 编辑 jar 文件上的内容

emacs jarfile

打开jar后,您可以浏览文件夹和文件。搜索 jdbc.properties 并对其进行编辑。然后使用 cx cs 保存更改。

注意:必须安装zip和unzip

于 2012-09-25T14:57:58.283 回答
1

我发现Java(或者更具体地说可能是Spring Boot)对JAR中文件的顺序很挑剔(引入了循环库依赖:“应用程序上下文中一些bean的依赖形成了一个循环”)。因此,需要一种保持顺序的方法。

解压缩原始 JAR并在生成的目录树1.jarunzip 1.jar进行更改。2.jar然后使用原始文件1.jar作为参考,在保留文件顺序的同时生成一个新存档。

## -r = --recurse-paths
## -Z = --compression-method
zip -r -Z store 2.jar $(unzip -l 1.jar |tr -s ' ' |cut -d' ' -f5 |grep -v /$ )
zip -r -Z store 2.jar $(unzip -l 1.jar |tr -s ' ' |cut -d' ' -f5 |grep    /$ )

这会将目录放在文件之后,这很奇怪,但我发现这是唯一可行的方法(关于循环依赖问题)。这两行可以合并为一个调用zip,但为了整洁,我在这里将它们分开。

为了使订单保存工作,重要的是新的档案2.jar要重新创建(不存在)。

Java 要求在不进一步压缩的情况下归档嵌套的 JAR 文件。完成此操作的最简单方法是使用-Z store写入新存档的所有文件。这可能会导致新存档大于原始存档。

您可以使用以下内容查看存档的内部顺序(插入您最喜欢的图形差异实用程序)

diff <(unzip -t 1.jar) <(unzip -t 2.jar)

在 Ubuntu 18.04 上测试。

于 2019-05-20T06:53:55.653 回答
0

您可以jar使用该jar xf bigExecutableJar.jar命令解压缩档案。如果可以的话,我建议安装atool,因为它提供了一个更好的命令行来打包/解包档案。

除非您知道如何处理vi,否则请nano用作编辑器。一些系统还mc安装了一个基于控制台的文件浏览器,它有一个内置的编辑器。

更改文件后,您可以使用jar cf bigExecutableJar-new.jar -C .(或atool --add)再次打包存档

如果您真的想要/需要使用jar,我建议您先在新目录中尝试该命令,因为它有时不会像您预期的那样运行。切勿在原始文件上使用它!

于 2012-09-25T14:56:36.247 回答
-1
sed -i "s/\(customAuthHeaderName=\).*\$/\1${customAuthHeaderName}/" configuration.properties

sed -i "s/\(logoutPage=\).*\$/\1${logoutPage}/" configuration.properties

第二个customAuthHeaderName值来自属性文件

于 2018-01-23T11:34:10.397 回答