Где я должен поместить файлы конфигурации приложения для проекта Maven? - PullRequest
9 голосов
/ 21 января 2009

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

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

Ответы [ 5 ]

6 голосов
/ 20 марта 2009

Вы также можете использовать фильтрацию ресурсов: 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

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

mvn -Denv = dev || mvn -Denv = dev-build || mvn -Denv = производство

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

4 голосов
/ 23 февраля 2012

Для тех, кто пришел к этому совсем недавно, начиная с версии 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>

Более подробная информация здесь

3 голосов
/ 10 апреля 2009

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

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

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

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

1 голос
/ 22 января 2009

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

0 голосов
/ 04 августа 2014

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

<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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...