2013-09-27 48 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謝謝你指出這一點。我以爲你正在執行一個生命週期階段。看到我更新的答案。 –