2017-12-15 20 views
0

에 대한의 InputStream을 가져올 수 없습니다 나는 migrateDb가 Gradle을 프로젝트에 이동 경로를 사용하여 문제가 가끔 만 때로는 모든 시간 만 발생하지 않습니다Gradle을하고 철새 이동 경로는 : 자원

Unable to obtain inputstream for resource: META-INF/db/mysql/V1__script.sql 

이 오류가 발생하지만이 발생하는 경우 한 그것은 꽤 끈기 있고 또한 프로젝트의 깨끗한/재건은 그것을 해결하지 못합니다.

언급 된 SQL 스크립트는 다중 모듈 프로젝트의 일부로 프로젝트에서 참조되는 JAR 파일 내에 포함되어 있습니다.

내 연구는 https://github.com/flyway/flyway/issues/702으로 나를 데려왔다. 그러나 이것은 올바른 길로 인도하지 못했습니다.

flyway가 classpath 검색 중에 파일을 찾을 수 있지만 입력 스트림을 가져올 수 없다는 사실 또한 매우 혼란 스럽습니다.

추가 정보가 필요하면 문의하십시오.

추가 디버깅 : 새로운 파일이 DB JAR에 추가되는 즉시 오류가 발생한 것으로 보입니다. 다시 작성한 후 migrateDb 오류가 발생합니다. 스크립트를 다시 제거하면 스크립트가 생성 된 JAR에 더 이상 없지만 오류가 계속 발생합니다. 그래서 스크립트를 검색하고 입력 스트림을 검색하는 클래스 패스가 다르다고 생각합니다. 아무도 어떤 차이가 있을지 알고 있습니까?

전체 스택 추적 :

Caused by: org.flywaydb.core.api.FlywayException: Unable to obtain inputstream for resource: META-INF/db/mysql/V1__script.sql 
     at org.flywaydb.core.internal.util.scanner.classpath.ClassPathResource.loadAsString(ClassPathResource.java:84) 
     at org.flywaydb.core.internal.resolver.sql.SqlMigrationResolver.scanForMigrations(SqlMigrationResolver.java:139) 
     at org.flywaydb.core.internal.resolver.sql.SqlMigrationResolver.resolveMigrations(SqlMigrationResolver.java:99) 
     at org.flywaydb.core.internal.resolver.sql.SqlMigrationResolver.resolveMigrations(SqlMigrationResolver.java:49) 
     at org.flywaydb.core.internal.resolver.CompositeMigrationResolver.collectMigrations(CompositeMigrationResolver.java:122) 
     at org.flywaydb.core.internal.resolver.CompositeMigrationResolver.doFindAvailableMigrations(CompositeMigrationResolver.java:104) 
     at org.flywaydb.core.internal.resolver.CompositeMigrationResolver.resolveMigrations(CompositeMigrationResolver.java:90) 
     at org.flywaydb.core.internal.resolver.CompositeMigrationResolver.resolveMigrations(CompositeMigrationResolver.java:43) 
     at org.flywaydb.core.internal.info.MigrationInfoServiceImpl.refresh(MigrationInfoServiceImpl.java:114) 
     at org.flywaydb.core.internal.command.DbValidate$2.call(DbValidate.java:164) 
     at org.flywaydb.core.internal.command.DbValidate$2.call(DbValidate.java:157) 
     at org.flywaydb.core.internal.util.jdbc.TransactionTemplate.execute(TransactionTemplate.java:75) 
     at org.flywaydb.core.internal.command.DbValidate.validate(DbValidate.java:157) 
     at org.flywaydb.core.Flyway.doValidate(Flyway.java:1280) 
     at org.flywaydb.core.Flyway.access$100(Flyway.java:71) 
     at org.flywaydb.core.Flyway$1.execute(Flyway.java:1176) 
     at org.flywaydb.core.Flyway$1.execute(Flyway.java:1168) 
     at org.flywaydb.core.Flyway.execute(Flyway.java:1650) 
     at org.flywaydb.core.Flyway.migrate(Flyway.java:1168) 
     at org.flywaydb.gradle.task.FlywayMigrateTask.run(FlywayMigrateTask.java:28) 
     at org.flywaydb.gradle.task.AbstractFlywayTask.runTask(AbstractFlywayTask.java:382) 

Gradle을 작업 :

// task that migrates the database 
task migrateDb(type: org.flywaydb.gradle.task.FlywayMigrateTask) { 
    // parse hibernate config 
    def hibernateConfig = parseHibernateConfigByStageParameter() 

    // set config 
    url = hibernateConfig.url 
    driver = hibernateConfig.driver 
    user = hibernateConfig.username 
    password = hibernateConfig.password 
    locations = [ "classpath:${flywayDbPath}/${hibernateConfig.dbType}" ] 
    table = 'schema_version' 
    outOfOrder = true 
    ignoreMissingMigrations = true 
} 

Gradle을 의존성 :

// dependencies 
dependencies { 
    [...] 
    runtime project(':core:db:mysql') 
    [...] 
} 
+1

Gradle 빌드 파일의 관련 부분을 제공 할 수 있습니까? – saw303

+0

@ saw303 나는 Gradle 작업을 추가했다. 그 밖의 무엇이 필요합니까? – Werzi2001

+0

그리고 SQL 스크립트가 위치한 Jar는 Gradle 빌드 종속성으로 정의되거나 어디에 있습니까? – saw303

답변

0

추가 테스트하는 동안 나는 오류 때문에 Gradle을 될 것으로 보인다 것으로 나타났습니다 악마. mig32D 호출에 --no-daemon을 추가하면 정상적으로 작동하고 오류가 발생하지 않습니다.

지금은 괜찮습니다.