如何在远程Linux服务器上编辑现有jar文件中的属性文件(如application.properties)。
假设jar位于/home/user/my-spring-boot.jar中,并且我希望将application.propertires中的用户名从
username=foo至
username=bar如何打开文件并更改属性?
发布于 2019-05-20 14:53:56
我发现Java (或者更具体地说是Spring Boot )对JAR中文件的顺序过于挑剔(引入了循环库依赖关系:“应用程序上下文中的一些bean的依赖关系形成一个循环”)。因此,需要一种保持顺序的方法。
使用unzip 1.jar解压原始的JAR 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上测试。
https://stackoverflow.com/questions/12585567
复制相似问题