Управление локальными файлами с Maven и SVN - PullRequest
3 голосов
/ 15 июня 2011

Я ищу лучший способ внедрения локальных файлов в проект, которые не отслеживаются с помощью контроля версий, таким образом, чтобы версия файла, контролируемая источником, не учитывала изменения.

В частности, у меня есть файл контекста с учетными данными базы данных. Я хочу сохранить необработанный файл «поместите здесь свои учетные данные» в систему управления версиями, но мне нужно, чтобы этот файл был заполнен соответствующими учетными данными для моей настройки разработки (или производственного сервера, или чего-то еще) без отправки этих учетных данных вернуться в систему контроля версий. Очевидно, что я могу просто отредактировать файл локально и не регистрировать его снова. Однако, это становится утомительным со временем, будучи осторожным, чтобы я не случайно регистрировал файл с учетными данными в центральном хранилище кода каждый раз, когда мне нужно проверьте изменения. Альтернативным подходом было бы проверить файл типа "-dist", который каждый пользователь должен был бы переименовать и отредактировать, чтобы проект вообще собирался.

Я попытался изучить Maven Overlays, поскольку это выглядело так, как будто бы мне потребовалось создать целый отдельный проект только для моих локальных учетных данных, с pom.xml и файлом war. Это похоже на большие затраты только для пары файлов. Что мне действительно нужно, так это способ сказать maven: «Если файл X (который вообще не находится в управлении исходным кодом) существует локально, используйте его. Если нет, используйте файл Y (который существует в управлении исходным кодом)». Похоже, должен быть достаточно автоматический способ справиться с этим.

Ответы [ 4 ]

6 голосов
/ 15 июня 2011

Простой

Я делал это в прошлом, это очень просто, есть один файл, например default.config, который проверяется в управлении версиями, есть другой файл с именем local.default.config, который находится в вашем svn.ignore файле.Пусть Maven скопирует local.default.config вместо default.config, если он существует, или попросите его скопировать оба, и ваше приложение будет искать local.default.config, а затем default.config, если первое не существует.

Вы можетедаже используйте одно и то же имя default.config, и приложение будет выглядеть в нескольких местах, при этом ваш home.dir будет иметь самый высокий приоритет, а затем - другое место.

Идеальная версия этого файла будет читать все файлы в некоторыхПриоритет и используйте последнее найденное свойство из всех файлов, тогда вы можете иметь default.config со всеми вашими свойствами и local.default.config только с немногими, которые нужно изменить для вашей локальной конфигурации.

Более изощренный Maven Oriented

Maven имеет несколько способов добраться туда, куда вы хотите:

  1. Используйте Maven profiles, чтобы включить или отключить property, который содержитимя файла, которое вы хотите использовать, и используйте maven-resources-plugin , чтобы скопировать файл, указанный в profile.
  2. Используйте функцию filter в Maven с profile Driven properties.
  3. Используйте maven-replacer-plugin для манипулирования файлом непосредственно на основе profile driven properties
  4. Используйте maven-dependency-plugin и сохраните ваши файлы в вашем локальном репозитории Maven и извлеките их из их во время фазы package.

profiles являются очень мощными и идеально подходят для настройки Maven для различных сред.У меня есть профиль local, dev, qa и release в каждом pom.xml.Я устанавливаю профиль local активным по умолчанию и выбираю остальные по мере необходимости с помощью mvn [goal] -P dev, который автоматически отключит local и использует properties, указанный в профиле dev.

Более изощренный SVN-ориентированный

Вы можете работать с локальной веткой development и иметь только локальную конфигурацию в этой ветке, и при слиянии ваш код возвращается к trunk исключить ваши изменения в файле конфигурации из слияния. Это действительно то, как я бы это сделал, поскольку мы используем Git.В SVN ветвление не так болезненно, что это не вариант

Я уверен, что есть и другие решения Maven.В любом случае вы решите это svn.ignore ваш друг.И использование Maven profile может быть очень мощным.

2 голосов
/ 15 июня 2011

Является ли Плагин замены Maven решением для ваших нужд?

1 голос
/ 15 июня 2011

Я думаю фильтрация может удовлетворить ваши потребности. Вы можете иметь local.filter, который не зарегистрирован, и prod.filter, который есть. Вы можете использовать prod.filter по умолчанию и заменить local.filter, основываясь на флаге командной строки или локальном профиле, которые разработчики должны будут использовать, а развертыватели - нет.

1 голос
/ 15 июня 2011

Мы используем jasypt для шифрования наших паролей в файлах свойств, считываемых Spring. Инструмент можно использовать и без пружины. Это позволяет очень просто сохранять файлы свойств в системе управления версиями.

Если ваша проблема связана с учетными данными пользователя, я бы посоветовал вам использовать тестовую учетную запись для любых выполняемых вами автоматических тестов.

...