Подтвердить что ты не робот

Как отредактировать содержимое файла application.properties или application.yml внутри существующей банки на удаленном сервере Linux

Как отредактировать файл свойств (например, application.properties) внутри существующего файла jar на удаленном сервере Linux.

Представьте, что jar находится в /home/user/my-spring-boot.jar, и мне нравится менять имя пользователя внутри application.propertires из

username=foo

к

username=bar

Как открыть файл и изменить его свойство?

4b9b3361

Ответ 1

Файл A .jar - это просто файл .zip с другим расширением, а vim может напрямую редактировать zip файлы и их содержимое! Просто vim ваш .jar, используйте навигатор файлов, чтобы найти файл свойств и изменить его. vim будет поддерживать zip с вашими изменениями.

Подробнее см. здесь.

Ответ 2

Возможным путем может быть скопировать банку в 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

Ответ 3

Вы можете сделать это с помощью emacs (после копирования вашего файла для резервного копирования):

$ cp /home/user/bigExecutableJar.jar /home/user/bigExecutableJar.jar.bak 
$ emacs /home/user/bigExecutableJar.jar
  • Если он большой, он спросит вас, действительно ли вы хотите открыть файл.
  • Затем вы можете искать файл, который хотите изменить в буфере, перечисляя все файлы в банке; используйте C-s, чтобы выполнить поиск, если это необходимо.
  • Откройте файл, выбрав его, и нажмите RET.
  • Внесите свои изменения и сохраните с помощью C-x C-s.
  • Закройте Emacs с помощью C-x C-c.

Ответ 4

Использовать emacs для редактирования содержимого в файле jar

emacs jarfile

После открытия банки вы можете просматривать папки и файлы. Найдите jdbc.properties и отредактируйте его. Затем сохраните изменения с помощью c-x c-s.

Примечание: необходимо установить zip и распаковать

Ответ 5

Изменение существующего артефакта JAR - не очень хорошая идея. Вместо этого Spring Boot позволяет легко переопределить связанные свойства с внешними значениями несколькими способами.

Например, вы можете поместить файл application.properties рядом с JAR со значениями, которые вы хотите переопределить. Вам даже не нужно копировать весь файл свойств там, только те свойства, которые вы хотите изменить, потому что они все еще возвращаются к связанным по умолчанию значениям.

Подробности описаны здесь:

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

Ответ 6

Вы можете распаковать архивы jar с помощью команды jar xf bigExecutableJar.jar. Если вы можете, я предлагаю установить atool, потому что он предлагает лучшую командную строку для упаковки/распаковки архивов.

Если вы не знаете, как обращаться с vi, используйте nano в качестве редактора. В некоторых системах также установлен mc, который представляет собой консольный файловый проводник с встроенным редактором.

После изменения файла вы можете снова упаковать архив, используя jar cf bigExecutableJar-new.jar -C . (или atool --add)

Если вам действительно нужно/нужно использовать jar, я предлагаю сначала попробовать команду в новом каталоге, потому что она иногда не ведет себя так, как вы ожидаете. Никогда не используйте его в исходном файле!

Ответ 7

Я обнаружил, что Java (или, может быть, это был Spring Boot более конкретно) требователен к порядку файлов в JAR (введены циклические библиотечные зависимости: "Зависимости некоторых компонентов в контексте приложения образуют цикл"). Следовательно, необходим способ сохранения порядка.

1.jar оригинальный JAR 1.jar по unzip 1.jar и внесите изменения в сгенерированное дерево каталогов. Затем 2.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)

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

Проверено на Ubuntu 18.04.

Ответ 8

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

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

Второе значение customAuthHeaderName поступает из файла свойств