Где я должен помещать файлы конфигурации приложения для проекта Maven?
Я использую плагин Maven Application Assembler для создания автономных исполняемых файлов из моего проекта Java. Приложение читает файлы конфигурации, включая Spring файлы. В плагине Application Assembler есть опция (активированная по умолчанию), чтобы добавить каталог etc/в путь класса приложения, но что мне делать, чтобы плагин копировал мои файлы конфигурации в этот каталог?
Или, в общем, где находится в Maven кошерное местоположение для файлов конфигурации приложения, которые НЕ должны быть упакованы в артефакт?
Ответы
Ответ 1
Вы также можете использовать фильтрацию ресурсов:
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
который устанавливает различные свойства в зависимости от того, является ли это конструкцией dev или production.
см. http://maven.apache.org/guides/introduction/introduction-to-profiles.html
У меня есть разные свойства, установленные в зависимости от того, является ли это сервером сборки, dev или производственным развертыванием
mvn -Denv = dev || mvn -Denv = dev-build || mvn -Denv = production
Ссылка maven имеет довольно хорошее описание.
Ответ 2
Вы можете попробовать плагин сборки maven. Я использовал его вместе с плагином appassembler.
Настройте appassembler, чтобы указать любое имя, которое вы хотите для своего каталога конфигурации, если вы не хотите "и т.д.". Плагин сборки собирает все в своем собственном выходном каталоге, поэтому я настраиваю плагин сборки, чтобы скопировать bin и repo dirs из каталога appassembler в его выходной каталог, после чего у меня есть его копия файлов конфигурации (мои находятся в src/main/config ) в ожидаемый конфигурационный каталог. В этом есть некоторое дублирование, потому что вы копируете выходы appassembler, но это меня действительно не беспокоило.
Таким образом, после выполнения плагина сборки ваш bin, repo и config dir - это все одноранговые каталоги в каталоге выходных данных сборки. Вы можете настроить его, чтобы иметь другую структуру, если хотите, я просто хотел, чтобы мое зеркало отображало структуру appassembler.
Хорошо, что вы также можете настроить плагин сборки, чтобы изменить свои двоичные файлы на исполняемые файлы, что я не мог видеть, как это сделать с appassembler. И если вы затем привязываете appassembler: сборку и сборку: одиночные цели на фазу пакета, все, что вам нужно сделать, это "mvn package", и он собирает все.
Ответ 3
Для людей, которые пришли к этому совсем недавно, есть, начиная с версии 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>
Дополнительная информация здесь
Ответ 4
Я не знаю, правильно ли я вас понимаю. Но то, что я делал в прошлом для проекта, где мне нужно было скопировать файлы конфигурации, используется плагин Maven AntRun. То, что я сделал, это выполнить плагин на фазе ресурсов процесса и скопировать мои файлы конфигурации в указанный каталог с помощью задачи копирования Ant. Плагин Ассемблер выполняется на фазе пакета, поэтому он должен подбирать ваши файлы конфигурации, если вы положите его в нужное место. Надеюсь, это немного ответит на ваш вопрос.
Ответ 5
Я искал ответ на то, на что я думаю, ваш вопрос или, по крайней мере, очень похожий вопрос. Maven позволяет вам указывать каталоги ресурсов, используя maven-resources-plugin. У меня есть несколько файлов конфигурации в одном из моих каталогов ресурсов. Я заметил, что, поместив копии этих файлов в каталог etc/, который вы упоминаете (который находится в начале моего CLASSPATH), я могу изменить значения в тех файлах, которые будут использоваться во время выполнения. Затем мне захотелось, чтобы каталог etc/, созданный с копиями всего, из моего каталога ресурсов по умолчанию. Цель copy-resources от плагина maven-resources позволила мне это сделать. Эта строфа из "Примеры" > "Копировать ресурсы" на левой боковой панели (я ограничена двумя ссылками в этом сообщении) - это то, что я сделал для меня:
<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>