Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在远程Linux服务器上的现有jar中编辑application.properties或application.yml文件的内容_Java_Jar - Fatal编程技术网

Java 如何在远程Linux服务器上的现有jar中编辑application.properties或application.yml文件的内容

Java 如何在远程Linux服务器上的现有jar中编辑application.properties或application.yml文件的内容,java,jar,Java,Jar,如何在远程Linux服务器上的现有jar文件中编辑属性文件(如application.properties) 假设jar位于/home/user/my spring boot.jar中,我想从 username=foo 到 如何打开文件并更改属性?可能的方法是将jar复制到zip文件中,提取、更改属性,压缩为zip并重命名为jar cp myJar.jar myJar.zip unzip myJar.zip vim myProperties.properties (doing the chan

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

假设jar位于
/home/user/my spring boot.jar中,我想从

username=foo


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

可能的方法是将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

.jar
文件只是一个扩展名不同的
.zip
文件,
vim
可以直接编辑zip文件及其内容!只需
vim
您的
.jar
,即可使用文件导航器查找并更改属性文件
vim
将在编辑时保持压缩


有关更多详细信息,请参阅。

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

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

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


如果您真的想/需要使用
jar
,我建议您先在一个新目录中尝试该命令,因为它有时的行为与您期望的不一样不要在原始文件上使用它

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

emacs jarfile
打开jar后,您可以浏览文件夹和文件。搜索jdbc.properties并编辑它。然后用c-x c-s保存更改


注意:需要安装zip并解压缩吗?

您可以使用
emacs
(复制文件进行备份后)执行此操作:

  • 如果文件很大,它会询问您是否真的要打开该文件
  • 然后可以在缓冲区中搜索要修改的文件,列出jar中的所有文件;如果需要,使用
    C-s
    进行搜索
  • 通过选择文件打开文件,然后按
    RET
  • 进行更改,然后使用
    C-x C-s
    保存
  • 最后用
    C-x C-C
    关闭Emacs

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

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

      详细信息记录在此处:

      第二个
      customAuthHeaderName
      值来自属性文件我发现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似乎非常方便,但在导航器中选择文件后,我出现了一个“警告:文件名不匹配”错误。哇,很高兴我找到了这个答案!vim是最好的选择,因为viI不认为这是“重写”绑定在jar中的属性的正确方法。更好的方法是在启动Spring Boot appI时使用-Dusername=bar或通过env变量传递属性。当然,我不建议将上述方法作为管理配置的最佳方法。上面回答了所问的具体问题,但正确管理配置是另一个(更大的)主题。您应该提供一些额外的解释,这正是我所需要的:)此外,为了缩短时间,您可以执行
      解压缩myJar.jar
      $ cp /home/user/bigExecutableJar.jar /home/user/bigExecutableJar.jar.bak 
      $ emacs /home/user/bigExecutableJar.jar
      
      sed -i "s/\(customAuthHeaderName=\).*\$/\1${customAuthHeaderName}/" configuration.properties
      
      sed -i "s/\(logoutPage=\).*\$/\1${logoutPage}/" configuration.properties
      
      ## -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    /$ )
      
      diff <(unzip -t 1.jar) <(unzip -t 2.jar)