Ошибка SchemaCrawler при добавлении артефакта MariaDB

Когда я добавляю это в pom.xml:

    <!-- https://mvnrepository.com/artifact/us.fatehi/schemacrawler-mariadb -->
    <dependency>
        <groupId>us.fatehi</groupId>
        <artifactId>schemacrawler-mariadb</artifactId>
        <version>14.08.06</version>
    </dependency>

Тогда я получаю ошибку:

java.util.ServiceConfigurationError: schemacrawler.tools.databaseconnector.DatabaseConnector: Provider schemacrawler.server.mariadb.MariaDBDatabaseConnector could not be instantiated
..
Caused by: java.lang.NoSuchMethodError: schemacrawler.tools.databaseconnector.DatabaseConnector.<init>(Lschemacrawler/tools/databaseconnector/DatabaseServerType;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V

Я пытаюсь подключиться к базе данных Oracle. Это работает, если я опущу MariaDb из пом.

Я использую более высокую версию SchemaCrawler:

    <dependency>
        <groupId>us.fatehi</groupId>
        <artifactId>schemacrawler</artifactId>
        <version>14.21.02</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/us.fatehi/schemacrawler-oracle -->
    <dependency>
        <groupId>us.fatehi</groupId>
        <artifactId>schemacrawler-oracle</artifactId>
        <version>14.21.02</version>
    </dependency>

Я хотел бы иметь MariaDB в pom.xml и все еще иметь возможность читать Oracle с помощью SchemaCrawler. Ошибка возникает после подключения к базе данных в последней строке следующего кода:

        Connection dbConnection = DatabaseBroker.getDbConnection(
                eventName, 
                cbDatabase.getValue(), 
                tConnectionString.getValue(), 
                tUsername.getValue(), 
                tPassword.getValue()
        );

        //Schema schema = SchemaCrawler.getSchema(dbConnection, SchemaInfoLevel.detailed(), new SchemaCrawlerOptions());
        //SchemaCrawler sc = new SchemaCrawler(dbConnection, null);
        try
        {
            Catalog catalog = SchemaCrawlerUtility.getCatalog(dbConnection, null);

1 ответ

Решение

Вы используете несовместимые версии основной библиотеки SchemaCrawler и подключаемого модуля базы данных SchemaCrawler. Вам не нужен плагин для MariaDB, если вы подключаетесь к Oracle. Фактически, SchemaCrawler будет работать с большинством баз данных даже без плагина базы данных SchemaCrawler на пути к классам.

Другие вопросы по тегам