Куда мне поместить файлы конфигурации приложения для проекта Maven?

Я использую плагин Ассемблер приложений Maven для создания автономных исполняемых файлов из моего проекта Java. Приложение читает файлы конфигурации, включая файлы Spring. У плагина Application Assembler есть опция (активированная по умолчанию) для добавления каталога etc / в путь к классам приложения, но что мне делать, чтобы плагин скопировал мои файлы конфигурации в этот каталог?

Или, в более общем плане, где в Maven кошерное расположение файлов конфигурации приложения, которые НЕ должны быть упакованы в артефакт?

9
0
15 934
5

Ответы 5

Не знаю, правильно ли я вас понял. Но то, что я делал в прошлом для проекта, в котором мне нужно было копировать файлы конфигурации, - это использовать Плагин Maven AntRun. Что я сделал, так это запустил плагин на этапе ресурсов процесса и скопировал мои файлы конфигурации в указанный каталог с помощью задачи копирования Ant. Плагин Assembler выполняется на этапе упаковки, поэтому он должен забрать ваши файлы конфигурации, если вы поместите его в нужное место. Надеюсь, это немного ответит на ваш вопрос.

Да, я полагаю, что это был бы самый простой способ сделать это вручную. Мне просто интересно, может ли плагин appassembler сделать это за вас, то есть забрать файлы конфигурации, скажем, из src / etc и скопировать их в $ {appname} / etc.

lindelof 23.01.2009 12:58

Вы также можете использовать фильтрацию ресурсов: http://maven.apache.org/guides/getting-started/index.html#How_do_I_filter_resource_files

включить фильтрацию:

...
<build>
...
<resources>
      <resource>
        <directory>src/main/resources</directory>
        <filtering>true</filtering>
      </resource>
    </resources>
...
</build>
...

создайте файл в src / main / resources, например: application.properties

application.properties

configprop.1=${param1}
configprop.2=${param2}

Затем настройте профиль и установите некоторые свойства, возможно, в settings.xml. который устанавливает разные свойства в зависимости от того, является ли это сборкой для разработчиков или производственной. см .: http://maven.apache.org/guides/introduction/introduction-to-profiles.html

У меня установлены разные свойства в зависимости от того, является ли это сервером сборки, разработчиком или производственным развертыванием.

mvn -Denv = dev || mvn -Denv = dev-build || mvn -Denv = production

Ссылка maven имеет довольно хорошее описание.

Вы можете попробовать плагин сборки maven. Я использовал его вместе с плагином appassembler.

Сконфигурируйте appassembler, чтобы он указывал на любое имя, которое вы хотите для своего каталога конфигурации, если вы не хотите 'etc'. Плагин сборки собирает все в своем собственном выходном каталоге, поэтому я настраиваю плагин сборки для копирования каталогов bin и repo из каталога appassembler в его выходной каталог, затем я копирую файлы конфигурации (мои находятся в src / main / config ) в ожидаемый каталог конфигурации. В этом есть некоторое дублирование, потому что вы копируете выходные данные appassembler, но это меня не особо беспокоило.

Итак, что у вас есть после выполнения плагина сборки, так это ваши bin, repo и config dir - все это одноранговые каталоги в выходном каталоге сборки. Вы можете настроить его так, чтобы он имел другую структуру, если хотите, я просто хотел, чтобы моя структура отражала структуру сборщика приложений.

Приятно то, что вы также можете настроить плагин сборки, чтобы преобразовать ваши двоичные файлы в исполняемые, что я не мог понять, как это сделать с помощью appassembler. И, если вы затем привяжете appassembler: assembly и assembly: single goal к фазе пакета, все, что вам нужно сделать, это «mvn package», и он все соберет.

Для людей, которые пришли к этому совсем недавно, начиная с версии 1.1 подключаемого модуля Application Assembler, есть необязательные параметры configurationSourceDirectory и copyConfigurationDirectory. Пожалуйста, найдите их в примере извлечения POM.xml ниже:

<configuration>
  <!-- Set the target configuration directory to be used in the bin scripts -->
  <configurationDirectory>conf</configurationDirectory>
  <!-- Copy the contents from "/src/main/config" to the target
      configuration directory in the assembled application -->
  <copyConfigurationDirectory>true</copyConfigurationDirectory>
  <!-- Include the target configuration directory in the beginning of
      the classpath declaration in the bin scripts -->
  <includeConfigurationDirectoryInClasspath>
    true
  </includeConfigurationDirectoryInClasspath>
...
</configuration>

Дополнительная информация: здесь

Я искал ответ на ваш вопрос или, по крайней мере, на очень похожий вопрос. Maven позволяет вам указывать каталоги для ресурсов с помощью Maven-ресурсы-плагин. У меня есть несколько файлов конфигурации в одном из моих каталогов ресурсов. Я заметил, что, помещая копии этих файлов в указанный вами каталог etc / (который находится в начале моего CLASSPATH), я могу изменять значения в этих файлах для использования во время выполнения. Затем я хотел создать каталог etc / с копиями всего из моего каталога ресурсов по умолчанию. Цель копировать ресурсы из maven-resources-plugin позволила мне это сделать. Эта фраза из Примеры> Копировать ресурсы на левой боковой панели (я ограничен двумя ссылками в этом сообщении) - вот что для меня сделало это:

<project>
  ...
  <build>
    <plugins>
      <plugin>
        <artifactId>maven-resources-plugin</artifactId>
        <version>2.6</version>
        <executions>
          <execution>
            <id>copy-resources</id>
            <!-- here the phase you need -->
            <phase>validate</phase>
            <goals>
              <goal>copy-resources</goal>
            </goals>
            <configuration>
              <outputDirectory>${basedir}/target/extra-resources</outputDirectory>
              <resources>          
                <resource>
                  <directory>src/non-packaged-resources</directory>
                  <filtering>true</filtering>
                </resource>
              </resources>              
            </configuration>            
          </execution>
        </executions>
      </plugin>
    </plugins>
    ...
  </build>
  ...
</project>

Другие вопросы по теме