2015-03-02 4 views
2

Я разрабатываю приложение (Groovy), которое я создаю через Gradle (на сервере непрерывной интеграции). Это приложение должно быть скомпилировано в две версии: одна сборка разработки (включая некоторые функции, которые я только хочу включить для себя), и одну публичную сборку (которая не включала бы или не отключала бы эти «функции разработки»).Установка «жестко закодированного» флага в источниках во время процесса сборки

Одним из решений этого было бы иметь что-то вроде глобального флага непосредственно в главном классе приложения, что-то вроде static final boolean PUBLIC_RELEASE. Затем в моем коде я мог проверить этот флаг и включить или отключить определенную функцию.

Теперь в моем скрипте сборки Gradle я мог проверить переменную среды (установленную сервером непрерывной интеграции). Если эта переменная установлена, то я могу установить (то есть изменить) текущее значение флага либо true, либо false до того, как источники будут скомпилированы.

Я уверен, что подход будет работать. Тем не менее, не всегда правильно изменять сами источники во время процесса сборки. С другой стороны, я бы предположил, что это стандартная задача для многих программных проектов.

Есть ли «лучшая практика» для решения этого требования?

ответ

0

ли может работать три пути для обработки сценария - упорядоченный так, как я бы сделать это:

  1. создать специальный Свойства ФАЙЛ фильтруются во время сборки и добавил к заключительному банку. Поведение приложения определяется этим файлом во время выполнения. В основном так обрабатывается такой сценарий, но такой файл может быть изменен в jar непосредственно пользователем.

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

  3. Настроить поведение приложения, передав системные свойства -D во время выполнения. Существует вероятность того, что многие из таких свойств должны быть переданы, что может быть проблематичным для конечного пользователя, и конфигурация приложения явно показана.

+0

Ну, я не хочу, чтобы пользователи могли включать эти скрытые функции. Таким образом, варианты 1 и 3 не являются решением моего требования. – Matthias

+0

Вот что я подумал. Таким образом, кажется, что вы можете использовать фильтрацию исходного кода. – Opal

+0

@ Matthias, если на вопрос ответьте, пожалуйста, примите ответ. – Opal

Смежные вопросы