example - maven settings.xml proxy
¿Puedo usar el archivo de propiedades en maven pom.xml para la configuración del corredor de vuelo? (6)
Echa un vistazo a las properties-maven-plugin
. Le permite leer las propiedades de un archivo para luego usarlas en su pom.
Agregue la siguiente definición de 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>
Si abc.properties
contiene:
jdbc.driver = com.mysql.jdbc.Driver
jdbc.url = jdbc:mysql://127.0.0.1:3306/db_ab
jdbc.user = db_user
A continuación, puede utilizar las propiedades de la siguiente manera:
<!-- language: xml -->
<driver>${jdbc.driver}</driver>
<url>${jdbc.url}</url>
<user>${jdbc.user}</user>
<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>
No quiero mencionar driver, url y usuario aquí. Ya tengo una abc.property
en src/main/resources
. ¿Cómo puedo usar ese archivo aquí?
En la versión 3.x tienes la opción configFile
By default- flyway.properties in the same directory as the project POM.
Puede agregar un archivo de propiedades externo en la sección de configuración de pom o se puede pasar al ejecutar maven goal example- command line-
mvn <goal> -Dflyway.configFile=myConfig.properties
Archivo 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>
En mi opinión, el mejor y más flexible enfoque es:
a) utilice los perfiles y el filtrado : mantenga todas las propiedades de configuración para un perfil específico (desarrollo, prueba, etc.), por ejemplo, en 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
Luego, en su archivo pom (posiblemente en root pom) defina un perfil, por ejemplo:
...
<profiles>
<profile>
<id>development</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<build>
<filters>
<filter>../filters/development.properties</filter>
</filters>
</build>
...
Aquí puedes ver que el perfil de desarrollo está activado por defecto. Si quieres usar otro perfil configúralo con
-p [profile-id]
b) establezca flyway.properties con valores filtrados : su flyway.properties debe ubicarse, por ejemplo, en src / main / resources y los valores deben usarse desde los parámetros definidos en el archivo de propiedades del perfil:
flyway.driver = ${jdbc.driver}
flyway.url = ${jdbc.url}
flyway.user = ${jdbc.user}
flyway.password = ${jdbc.password}
c) haga referencia a flyway.properties desde el directorio de compilación : use la configuración simple del complemento (realmente me gustan los poms limpios):
...
<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>
...
No olvide habilitar el filtrado de recursos como se muestra en muchos ejemplos aquí. Mi versión de Flyway-Maven-Plugin es 3.2.1 y se administra en pluginManagement en el pom principal, por lo tanto, la versión no es visible aquí. También uso scripts sql explícitos con configuración de ubicaciones.
Garry
Hay una forma más de no colocar los parámetros de conexión de la base de datos en su archivo pom. En particular, uno puede agregarlos al archivo settings.xml en la subcarpeta .m2 de la carpeta del usuario [1] . El beneficio es que los paraneters db no viven en la carpeta del proyecto y no se transmiten al repositorio, por lo que cada desarrollador puede usar su propia configuración.
El ejemplo del archivo de configuración podría verse como el ejemplo a continuación.
<?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>
Después de eso, puede modificar su archivo pom de acuerdo con el siguiente fragmento de código.
<?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>
En el ejemplo anterior se usa el controlador de Oracle, pero puede reemplazarlo con el requerido.
Para imprimir la configuración actual ejecute lo siguiente.
mvn help:effective-settings
Hay varias maneras de lidiar con esto. Un enfoque es hacerlo al revés.
Eso significa que las propiedades a usar se guardan como propiedades dentro del pom.xml
y que el archivo abc.properties
solo tiene marcadores de posición que se completarán en el momento de la compilación.
Te mostraré cómo se puede configurar.
Así es como se verá el 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.</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>
Y este será su src/main/resources/abc.properties
(use los nombres de clave que elija):
jdbcDriver = ${jdbc.driver}
jdbcUrl = ${jdbc.url}
jdbcUser = ${jdbc.user}
Después de la construcción, el target/classes/abc.properties
se verá así:
jdbcDriver = com.mysql.jdbc.Driver
jdbcUrl = jdbc:mysql://127.0.0.1:3306/db_abc
jdbcUser = db_user
Como se dijo, esta es solo una de las varias formas de hacerlo. Puede que no se ajuste a sus necesidades exactas pero podría.
en la versión 3.0 tienes que usar configFile como:
<configFile>src/main/resources/db/config/flyway.properties</configFile>