Я использую плагин Ассемблер приложений Maven для создания автономных исполняемых файлов из моего проекта Java. Приложение читает файлы конфигурации, включая файлы Spring. У плагина Application Assembler есть опция (активированная по умолчанию) для добавления каталога etc / в путь к классам приложения, но что мне делать, чтобы плагин скопировал мои файлы конфигурации в этот каталог?
Или, в более общем плане, где в Maven кошерное расположение файлов конфигурации приложения, которые НЕ должны быть упакованы в артефакт?
Не знаю, правильно ли я вас понял. Но то, что я делал в прошлом для проекта, в котором мне нужно было копировать файлы конфигурации, - это использовать Плагин Maven AntRun. Что я сделал, так это запустил плагин на этапе ресурсов процесса и скопировал мои файлы конфигурации в указанный каталог с помощью задачи копирования Ant. Плагин Assembler выполняется на этапе упаковки, поэтому он должен забрать ваши файлы конфигурации, если вы поместите его в нужное место. Надеюсь, это немного ответит на ваш вопрос.
Вы также можете использовать фильтрацию ресурсов: 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>
Да, я полагаю, что это был бы самый простой способ сделать это вручную. Мне просто интересно, может ли плагин appassembler сделать это за вас, то есть забрать файлы конфигурации, скажем, из src / etc и скопировать их в $ {appname} / etc.