3

我想使用 SQLite 的Xerial JDBC 驱动程序运行两个第三方 Maven 插件。插件配置大致如下:

<plugins>
    <!-- reset database with the SQL Maven plugin -->
    <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>sql-maven-plugin</artifactId>
        <executions>...</executions>
        <dependencies>
            <dependency>
                <groupId>org.xerial</groupId>
                <artifactId>sqlite-jdbc</artifactId>

    [...]

    <!-- generate source code with the jOOQ Maven plugin -->
    <plugin>
        <groupId>org.jooq</groupId>
        <artifactId>jooq-codegen-maven</artifactId>
        <executions>...</executions>
        <dependencies>
            <dependency>
                <groupId>org.xerial</groupId>
                <artifactId>sqlite-jdbc</artifactId>

    [...]

现在这个 SQLite JDBC 驱动程序在内部加载了一个本地库,这会导致在第二个插件的执行中出现以下错误:

java.lang.UnsatisfiedLinkError: Native Library 
C:\Users\Lukas\AppData\Local\Temp\sqlite-3.7.151-amd64-sqlitejdbc.dll
already loaded in another classloader

解决方法是注释掉其中一个插件。

是否有适当的方法来规避这个问题,而不会对运行它的系统做出任何假设?我想用上面创建独立的测试,它应该在任何系统上运行,即将东西放入系统库路径不是这里的解决方案。这可以用Maven解决吗?或者是否需要修复上述任何插件或(更有可能)JDBC驱动程序?

4

0 回答 0