Могу ли я использовать файл свойств в maven pom.xml для настройки пролетного пути - программирование
Подтвердить что ты не робот

Могу ли я использовать файл свойств в 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. Как использовать этот файл здесь?

4b9b3361

Ответ 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>