Могу ли я использовать файл свойств в maven pom.xml для настройки пролетного пути
<plugin>
<groupId>com.googlecode.flyway</groupId>
<artifactId>flyway-maven-plugin</artifactId>
<version>1.7</version>
<configuration>
<driver>com.mysql.jdbc.Driver</driver>
<url>jdbc:mysql://127.0.0.1:3306/db_abc</url>
<user>db_user</user>
<sqlMigrationPrefix>V</sqlMigrationPrefix>
</configuration>
</plugin>
Я не хочу упоминать здесь драйвера, URL и пользователя. У меня уже есть abc.property
на src/main/resources
. Как использовать этот файл здесь?
Ответы
Ответ 1
Посмотрите properties-maven-plugin
. Это позволяет вам читать свойства из файла, а затем использовать их в своей папке.
Добавьте следующую настройку плагина:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>properties-maven-plugin</artifactId>
<version>1.0.0</version>
<executions>
<execution>
<phase>initialize</phase>
<goals>
<goal>read-project-properties</goal>
</goals>
<configuration>
<files>
<file>src/main/resources/abc.properties</file>
</files>
</configuration>
</execution>
</executions>
</plugin>
Если abc.properties
содержит:
jdbc.driver = com.mysql.jdbc.Driver
jdbc.url = jdbc:mysql://127.0.0.1:3306/db_ab
jdbc.user = db_user
Затем вы можете использовать свойства следующим образом:
<!-- language: xml -->
<driver>${jdbc.driver}</driver>
<url>${jdbc.url}</url>
<user>${jdbc.user}</user>
Ответ 2
в версии 3.0 вы должны использовать configFile, например:
<configFile>src/main/resources/db/config/flyway.properties</configFile>
Ответ 3
На мой взгляд, лучший и самый гибкий подход заключается в следующем:
a) использовать профили и фильтрацию - сохранять все свойства конфигурации для определенного профиля (разработка, тестирование и т.д.), например. в development.properties:
jdbc.url=jdbc:mysql://127.0.0.1:3306/testdb?useSSL=false
jdbc.user=testuser
jdbc.password=testpass
jdbc.driver=com.mysql.jdbc.Driver
Затем в вашем файле pom (возможно, в корневом pom) определите профиль, например:
...
<profiles>
<profile>
<id>development</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<build>
<filters>
<filter>../filters/development.properties</filter>
</filters>
</build>
...
здесь вы можете увидеть, что профиль разработки активирован по умолчанию. Если вы хотите использовать другой профиль, установите его с помощью
-p [profile-id]
b) установить flyway.properties с отфильтрованными значениями - ваш flyway.properties должен сидеть, например. в src/main/resources и значения должны использоваться из параметров, определенных в файле свойств профиля:
flyway.driver = ${jdbc.driver}
flyway.url = ${jdbc.url}
flyway.user = ${jdbc.user}
flyway.password = ${jdbc.password}
c) ссылка flyway.properties из каталога сборки - используйте простую конфигурацию плагина (мне очень нравятся чистые поры):
...
<build>
<resources>
<!-- This way we instruct maven to inject values from filters into the resources -->
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-maven-plugin</artifactId>
<configuration>
<configFile>${project.build.directory}/classes/flyway.properties</configFile>
<locations>
<location>classpath:migration/mysql</location>
</locations>
</configuration>
</plugin>
</plugins>
</build>
...
Не забудьте включить фильтрацию в ресурсах, как показано во многих примерах здесь. Моя версия flyway-maven-plugin 3.2.1, и она управляется в pluginManagement в родительском помпе, поэтому версия здесь не видна. Я также использую явные sql-скрипты с конфигурацией местоположений.
Ответ 4
Есть несколько способов справиться с этим. Один из подходов - сделать это наоборот.
Это означает, что используемые свойства сохраняются как свойства внутри pom.xml
и что в файле abc.properties
есть только заполнители, которые будут заполнены во время сборки.
Я покажу вам, как его можно настроить.
Вот что будет выглядеть pom.xml
:
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.stackoverflow</groupId>
<artifactId>Q12619446</artifactId>
<version>1.0-SNAPSHOT</version>
<name>${project.artifactId}-${project.version}</name>
<properties>
<jdbc.driver>com.mysql.jdbc.Driver</jdbc.driver>
<jdbc.url>jdbc:mysql://127.0.0.1:3306/db_abc</jdbc.url>
<jdbc.user>db_user</jdbc.user>
</properties>
<build>
<plugins>
<plugin>
<groupId>com.googlecode.flyway</groupId>
<artifactId>flyway-maven-plugin</artifactId>
<version>1.7</version>
<configuration>
<driver>${jdbc.driver}</driver>
<url>${jdbc.url}</url>
<user>${jdbc.user}</user>
</configuration>
</plugin>
</plugins>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
</build>
</project>
И это будет ваш src/main/resources/abc.properties
(используйте имена клавиш по вашему выбору):
jdbcDriver = ${jdbc.driver}
jdbcUrl = ${jdbc.url}
jdbcUser = ${jdbc.user}
После сборки target/classes/abc.properties
будет выглядеть так:
jdbcDriver = com.mysql.jdbc.Driver
jdbcUrl = jdbc:mysql://127.0.0.1:3306/db_abc
jdbcUser = db_user
Как указано, это всего лишь один несколько способов сделать это. Это может не соответствовать вашим конкретным потребностям, но это может быть.
Ответ 5
Garry,
есть еще один способ не устанавливать параметры подключения базы данных к вашему pom файлу. В частности, их можно добавить в файл settings.xml в подпапке .m2 пользовательской папки [1]. Преимущество в том, что db paraneters не живут в папке проекта и не передаются в репозиторий, поэтому каждый разработчик может использовать свои собственные настройки.
Пример файла настроек может выглядеть следующим образом.
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<profiles>
<profile>
<id>fw</id>
<properties>
<flyway.url>jdbc:oracle:thin:@//localhost:1521/xe</flyway.url>
<flyway.user>Your login</flyway.user>
<flyway.password>Your password</flyway.password>
</properties>
</profile>
</profiles>
<activeProfiles>
<activeProfile>fw</activeProfile>
</activeProfiles>
</settings>
После этого вы можете изменить свой pom файл в соответствии со следующим фрагментом.
<?xml version="1.0"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
...
<dependencies>
...
</dependencies>
<profiles>
<profile>
<id>fw</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<build>
<plugins>
<plugin>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-maven-plugin</artifactId>
<version>3.2.1</version>
<configuration>
<url>${flyway.url}</url>
<user>${flyway.user}</user>
<password>${flyway.password}</password>
</configuration>
<dependencies>
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc7</artifactId>
<version>12.1.0.1.0</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
</profile>
</profiles>
</project>
В приведенном выше примере используется драйвер Oracle, но вы можете заменить его на требуемый.
Для печати текущих настроек выполните следующие действия.
mvn help:effective-settings
Ответ 6
В версии 3.x у вас есть опция configFile
By default- flyway.properties in the same directory as the project POM.
Вы можете добавить внешний файл свойств в разделе конфигурации pom или может пройти при запуске maven target example-
командной строки -
mvn <goal> -Dflyway.configFile=myConfig.properties
Файл Pom -
<plugin>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-maven-plugin</artifactId>
<version>3.2.1</version>
<configuration>
<driver/>
<url/>
<user/>
<password/>
<baselineVersion>1.0</baselineVersion>
<baselineDescription>Base Migration</baselineDescription>
<skip>false</skip>
<configFile>myConfig.properties</configFile>
</configuration>
</plugin>