2014-03-02 2 views
3

나는 gradle, flyway gradle plugin, mybatis generator 및 postgres를 사용하는 프로젝트가 있습니다. 내 build.gradle, 나는이 :Flyway Gradle plugin - 순환 의존성

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 plugin 코드 (https://github.com/flyway/flyway/tree/master/flyway-gradle-plugin)를 살펴 봤는데 플라이 웨이 작업은 flyway Java API를 사용하여 작성된 마이그레이션을 지원하기 위해 컴파일 작업에 의존한다는 것이 내 생각입니다.

플라이 웨이 플러그인은 프로젝트가 자바 프로젝트라면 Java API를 사용한다고 가정합니다.

줄 사이를 읽으면 플라이웨이에서 마이그레이션을위한 별도의 그래 플 하위 프로젝트가 필요하다고 생각됩니다.

그래서 마이그레이션을 '마이그레이션'이라는 하위 프로젝트로 이동하십시오. 그런 다음

myBatisGenerator.dependsOn(':migrations:flywayMigrate') 

등을 할 수있는 '마이그레이션 : flywayMigrate을'에 따라 유일한 것 '마이그레이션 : compileTestJava'을 오히려 주보다 'compileTestJava'(심지어 후 '마이그레이션'은 자바 프로젝트 인 경우에만)

+0

는 다른 방법이 flywayMigrate.taskDependencies.values ​​같은 것을 사용하여 taskDependency을 제거 할 수 있습니다 - = "testClasses" –