2014-03-02 47 views
3

我有一個使用gradle,flyway gradle插件,mybatis generator和postgres的項目。在我的build.gradle,我有:Flyway Gradle插件 - 循環依賴

compileJava.dependsOn('myBatisGenerator') 

我想myBatisGenerator運行之前運行flywayMigrate任務。所以,我做了以下內容:

 myBatisGenerator.dependsOn('flywayMigrate') 

當我嘗試運行構建使用gradle這個測試,我得到以下錯誤:

FAILURE: Build failed with an exception. 

* What went wrong: 
Circular dependency between the following tasks: 
:classes 
+--- :compileGroovy 
| \--- :compileJava 
|   \--- :myBatisGenerator 
|    \--- :flywayMigrate 
|     \--- :testClasses 
|      +--- :compileTestGroovy 
|      | +--- :classes (*) 
|      | \--- :compileTestJava 
|      |   \--- :classes (*) 
|      \--- :compileTestJava (*) 
\--- :compileJava (*) 

(*) - details omitted (listed previously) 

我不知道爲什麼compileTestJava正在從所謂的內flywayMigrate插件。任何想法如何解決這個問題,仍然有flyway插件運行在mybatis生成器之前?

回答

3

我看了一下flyway gradle插件代碼(https://github.com/flyway/flyway/tree/master/flyway-gradle-plugin),我猜測flyway任務取決於編譯任務,以支持使用flyway Java API編寫的遷移。

flyway插件似乎假設如果該項目是一個Java項目,那麼你正在使用Java API。

在各行之間進行閱讀,似乎flyway希望您有一個單獨的Gradle子項目供您進行遷移。

因此,將您的遷移遷移到稱爲「遷移」的子項目。然後,你可以做

myBatisGenerator.dependsOn(':migrations:flywayMigrate') 

和「:遷移:flywayMigrate」將只取決於「:遷移:compileTestJava」,而不是你的主「:compileTestJava」(即使這樣僅當「遷移」是一個Java項目)

+0

另外,您可以使用類似flywayMigrate.taskDependencies.values刪除taskDependency - = 「testClasses」 –