2013-09-27 49 views
2

我试图让我的.properties文件读取properties-maven-plugin。 Flyway(即时尝试使用属性)只是不断抛出有关数据库网址格式错误的错误,但工程如果我在pom.xml本身设置值,而不是使用从文件读取的属性。Maven读取.properties在pom.xml中使用

Im使用eclipse与m2e插件。

插件配置以从读取的.properties

<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>properties-maven-plugin</artifactId> 
    <version>1.0-alpha-2</version> 
    <executions> 
    <execution> 
     <phase>initialize</phase> 
     <goals> 
     <goal>read-project-properties</goal> 
     </goals> 
     <configuration> 
     <files> 
      <file>src/main/resources/config.properties</file> 
     </files> 
     </configuration> 
    </execution> 
    </executions> 
</plugin> 

迁飞config其中的属性正在使用位于/ SRC /主/资源

<plugin> 
    <groupId>com.googlecode.flyway</groupId> 
    <artifactId>flyway-maven-plugin</artifactId> 
    <version>2.2.1</version> 
    <executions> 
    <execution> 
    <phase>compile</phase> 
     <goals> 
     <goal>flyway:migrate</goal> 
     </goals> 
    </execution> 
    </executions> 
    <configuration> 
    <driver>${db.driver}</driver> 
    <url>${db.url}</url> 
    <user>${db.user}</user> 
    <password>${db.password}</password> 
    </configuration> 
    <dependencies> 
    <dependency> 
     <groupId>mysql</groupId> 
     <artifactId>mysql-connector-java</artifactId> 
     <version>5.1.26</version> 
    </dependency> 
    </dependencies> 
</plugin> 

config.properties/

# Database details 
db.driver=com.mysql.jdbc.Driver 
db.url=jdbc:mysql://localhost:3306/dbname 
db.user=username 
db.pass=password 

我试图通过几个其他的stackoverflow线程,但没有解决方案s eem工作。我对maven很陌生,整个事情似乎都在抛我,任何人都会有光芒流下来?

+0

是否Eclipse之外工作?当你简单地运行'mvn'命令? –

+0

仍然有相同的“参数”url“丢失或无效” – Wader

+1

尝试查看Flyway的日志文件(如果存在的话)中传递给Flyway的参数。另外从Flyway网站上查看一些示例,可以看出DB数据库存在细微差别: “jdbc:sqlserver:// prodDB:1040; databaseName = flyway_prod”。所以我建议你尝试“jdbc:mysql:// localhost:3306; databaseName = dbname”,虽然你说过直接指定参数params ... – hovanessyan

回答

1

基本上有两种方法可以执行飞行用迁移的目标:

  1. 作为一个生命周期阶段的一部分:您已经配置在编译阶段要执行飞行用的插件。这意味着您只需输入mvn compile,Flyway将与该生命周期阶段和以前所有阶段中的所有其他目标一起执行。一切工作正常,除非你有轻微的配置错误:目标不得添加前缀。为了解决这个问题,你必须提供没有前缀的目标:

    <goals> 
        <goal>migrate</goal> 
    </goals> 
    

    现在执行工作。 Flyway从properties-maven-plugin获取所有参数,因为它在上一阶段执行。

  2. 直接调用:如果你mvn flyway:migrate执行迁徙路径,插件调用独立于任何生命周期阶段。由于没有阶段被执行,所以properties-maven-plugin也不会被执行,因为它依赖于初始化阶段 - 它实际上不设置任何参数。这就是为什么Flyway抱怨缺少参数。

解决方案: 如果你想要的属性,Maven的插件与迁飞一起工作,你必须执行迁飞作为生命周期的一部分。如果你不希望与每一个调用它编译阶段,你可以创建一个单独的配置文件,只有当你需要与mvn compile -PflywayMigration飞路迁移运行此文件:

<profiles> 
    <profile> 
     <id>flywayMigration</id> 
     <build> 
      <plugins> 
       <plugin> 
        <groupId>com.googlecode.flyway</groupId> 
        <artifactId>flyway-maven-plugin</artifactId> 
        <version>2.2.1</version> 
        <executions> 
         <execution> 
          <phase>compile</phase> 
          <goals> 
           <goal>migrate</goal> 
          </goals> 
         </execution> 
        </executions> 
        <configuration> 
         <driver>${db.driver}</driver> 
         <url>${db.url}</url> 
         <user>${db.user}</user> 
         <password>${db.password}</password> 
        </configuration> 
        <dependencies> 
         <dependency> 
          <groupId>mysql</groupId> 
          <artifactId>mysql-connector-java</artifactId> 
          <version>5.1.26</version> 
         </dependency> 
        </dependencies> 
       </plugin> 
      </plugins> 
     </build> 
    </profile> 
</profiles> 
+0

它不是一个flyway没有试图运行迁移。它的属性不是从文件中读取的。它工作正常,如果我用pom.xml中的值替换标记 – Wader

+0

@Wader谢谢你指出这一点。我以为你正在执行一个生命周期阶段。看到我更新的答案。 –