2015-11-20 3 views
1

Я хочу назвать свои файлы WAR автоматически в зависимости от appName, appVersion и короткого имени Environment.current. У меня есть следующие настройки опции в BuildConfig.groovy:Название WAR на основе среды в BuildConfig.groovy

String currentEnvShortName = Environment.envNameMappings.find{it.value == Environment.current.name}.key 

def f = new File("grails-app/conf/config.properties") 
f.text = "" 
f << "Current Env: ${currentEnvShortName}" 

grails.project.war.file = "target/war/${appName}-${appVersion.toString().replaceAll(/\./,' ').split().join("-")}${currentEnvShortName}.war" 

Я пишу среду в файл, так что я не должен ждать команды war выполнить. EDIT: ИСПОЛЬЗОВАНИЕ GGTS COMMAND LINE. Во-первых, я думал, что все работает так, как ожидалось. Мой обычный процесс развертывания заключается в следующем:

  1. запустить grails clean
  2. кнопкуВыполнения war команды для нужной среды
  3. развертывания WAR на сервере приложений

После чистые, однако, и, возможно, также после того, как другие grails, значение Environment.current изменений в пути я не понимаю. Это всегда dev при первом запуске команды war. После этого первого раза имя среды снова будет восстановлено. Так что я делаю, как обходной путь является:

  1. запустить grails clean
  2. запустить war команды для желаемой среды, но перерыв сразу после его запуска
  3. запустить war команды для требуемой среды
  4. развертывания WAR на сервер приложений

Я делаю что-то неправильно или это ошибка?

Окружающая среда для воспроизведения:

GGTS 3.6.4 RELEASE

Grails 2.4.2

Groovy 2.3.10

JDK 1.6.0_07

EDIT: I не удалось воспроизвести использование Grails из обычной командной строки. Такое поведение происходит только с встроенной командной строкой Groovy Grails Tool Suite. Кажется, что среда переключается случайным образом.

EDIT 2: ОС: Windows 7

ответ

0

Проблема возникает только со встроенной командой линия Groovy Grails Tool Suite в Windows. Если команда war выполняется из Windows CMD, то среда используется правильно.

Однако при выполнении из Windows CMD кодирование ломается для меня. Я рассмотрел этот конкретный вопрос в another question.

1

Ну, я попробовал ваш сценарий несколько раз, но не мог в состоянии воспроизвести это. Но, если он не работает для вашего по какой-то причине, вы можете использовать другой подход следующим образом:

Изменить код в ваш BuildConfig.groovy как:

// Define a custom mapping so that you can easily extend for custom environments (which will not be possible via "Environment.current.envNameMappings" 
Map envNameMappings = [test: "test", development: "dev", production: "prod"] 

// Read the currrent environment from System property 
String currentEnv = System.getProperty("grails.env") 

println currentEnv 
// And this is the short name of environment you want 
println envNameMappings[currentEnv] 
+0

Я мог бы воспроизвести его во вновь созданном проекте; однако проблема возникает только с командной строкой GGTS (Eclipse). Я обновил свой ответ. Интересно, что по-разному работает с Eclipse. Кажется, что он не всегда правильно использует текущую среду. – nst1nctz

+0

Да, это странно. Я тестировал его с помощью командной строки. –

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