我想使用 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驱动程序?