diff --git a/extensions/flyway/deployment/src/main/java/io/quarkus/flyway/FlywayProcessor.java b/extensions/flyway/deployment/src/main/java/io/quarkus/flyway/FlywayProcessor.java index d04388a3b86e7..ef92094d9ff23 100644 --- a/extensions/flyway/deployment/src/main/java/io/quarkus/flyway/FlywayProcessor.java +++ b/extensions/flyway/deployment/src/main/java/io/quarkus/flyway/FlywayProcessor.java @@ -12,7 +12,6 @@ import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; -import java.util.ArrayList; import java.util.Collection; import java.util.Enumeration; import java.util.HashMap; @@ -103,7 +102,7 @@ void build(BuildProducer featureProducer, Collection dataSourceNames = getDataSourceNames(jdbcDataSourceBuildItems); - List applicationMigrations = discoverApplicationMigrations(getMigrationLocations(dataSourceNames)); + Collection applicationMigrations = discoverApplicationMigrations(getMigrationLocations(dataSourceNames)); recorder.setApplicationMigrationFiles(applicationMigrations); Set> javaMigrationClasses = new HashSet<>(); @@ -196,15 +195,19 @@ private Collection getMigrationLocations(Collection dataSourceNa return migrationLocations; } - private List discoverApplicationMigrations(Collection locations) throws IOException, URISyntaxException { + private Collection discoverApplicationMigrations(Collection locations) + throws IOException, URISyntaxException { try { - List applicationMigrationResources = new ArrayList<>(); + LinkedHashSet applicationMigrationResources = new LinkedHashSet<>(); // Locations can be a comma separated list for (String location : locations) { // Strip any 'classpath:' protocol prefixes because they are assumed // but not recognized by ClassLoader.getResources() if (location != null && location.startsWith(CLASSPATH_APPLICATION_MIGRATIONS_PROTOCOL + ':')) { location = location.substring(CLASSPATH_APPLICATION_MIGRATIONS_PROTOCOL.length() + 1); + if (location.startsWith("/")) { + location = location.substring(1); + } } Enumeration migrations = Thread.currentThread().getContextClassLoader().getResources(location); while (migrations.hasMoreElements()) { diff --git a/integration-tests/flyway/src/main/resources/application.properties b/integration-tests/flyway/src/main/resources/application.properties index c755b65541234..6e99424fe1822 100644 --- a/integration-tests/flyway/src/main/resources/application.properties +++ b/integration-tests/flyway/src/main/resources/application.properties @@ -11,7 +11,7 @@ quarkus.datasource.jdbc.url=jdbc:h2:tcp://localhost/mem:test_quarkus;DB_CLOSE_DE quarkus.flyway.connect-retries=10 quarkus.flyway.schemas=TEST_SCHEMA quarkus.flyway.table=flyway_quarkus_history -quarkus.flyway.locations=db/location1,classpath:db/location2 +quarkus.flyway.locations=db/location1,classpath:db/location2,classpath:/db/location4 quarkus.flyway.sql-migration-prefix=V quarkus.flyway.migrate-at-start=true quarkus.flyway.placeholders.foo=bar diff --git a/integration-tests/flyway/src/main/resources/db/location4/V1.0.2__Quarkus.sql b/integration-tests/flyway/src/main/resources/db/location4/V1.0.2__Quarkus.sql new file mode 100644 index 0000000000000..b678109e4662c --- /dev/null +++ b/integration-tests/flyway/src/main/resources/db/location4/V1.0.2__Quarkus.sql @@ -0,0 +1,2 @@ +INSERT INTO TEST_SCHEMA.quarkus_table2(id, name) +VALUES (2, '1.0.2 QUARKED'); diff --git a/integration-tests/flyway/src/test/java/io/quarkus/it/flyway/FlywayFunctionalityTest.java b/integration-tests/flyway/src/test/java/io/quarkus/it/flyway/FlywayFunctionalityTest.java index 306e67bf1bbe1..1002515d3b09b 100644 --- a/integration-tests/flyway/src/test/java/io/quarkus/it/flyway/FlywayFunctionalityTest.java +++ b/integration-tests/flyway/src/test/java/io/quarkus/it/flyway/FlywayFunctionalityTest.java @@ -15,7 +15,7 @@ public class FlywayFunctionalityTest { @Test @DisplayName("Migrates a schema correctly using integrated instance") public void testFlywayQuarkusFunctionality() { - when().get("/flyway/migrate").then().body(is("1.0.1")); + when().get("/flyway/migrate").then().body(is("1.0.2")); } @Test