我正在尝试使用 Java 11 将 JDBC 连接器模块添加到我的项目中。我下载了适用于 Java 11 的 MSSqlServer JDBC 驱动程序 7.2
https://www.microsoft.com/en-us/download/details.aspx?id=57782
我添加了模块:
requires com.microsoft.sqlserver.jdbc;
然而,当我尝试清理+构建时,NetBeans 告诉我:
Error: automatic module cannot be used with jlink: com.microsoft.sqlserver.jdbc from file: /sqljdbc_7.2/enu/mssql-jdbc-7.2.2.jre11.jar
我很确定这是因为罐子没有编译的
module-info.java
。但是,我想知道是否有办法在其中注入一个?
如果您使用的是 Maven,则可以使用
moditect 插件的
add-module-info
目标。下面是我用来使 h2 jdbc 驱动程序和引擎与 jlink 一起工作的 pom.xml 片段。该插件在 ${project.build.directory}/modules 中创建了一个补丁副本,然后可以将其链接进去。我必须自己创建moduleInfoSource
部分。为此,我使用了 jdeps --multi-release=11
、java --describe-module
和 moditect:generate-module-info
目标并检查清单文件以计算出 require 语句等 - 为了使这些工作正常,您必须包含您正在尝试的 JDBC jar 的所有依赖项到 jlink。 H2 有很多“可选”功能——我必须手动将这些功能的要求标记为静态。所有这些都非常乏味,但是如果您对 SQL Server JDBC 驱动程序执行相同的操作,它应该适用于未来的版本,直到发布官方模块化组件:
<plugin>
<artifactId>maven-jlink-plugin</artifactId>
<version>3.1.0</version>
<extensions>true</extensions>
<configuration>
<launcher>myapp=myappmodule/mypackage.MainClass</launcher>
<modulePaths>
<modulePath>${project.build.directory}/modules</modulePath>
</modulePaths>
</configuration>
</plugin>
<plugin>
<groupId>org.moditect</groupId>
<artifactId>moditect-maven-plugin</artifactId>
<version>1.0.0.RC2</version>
<executions>
<execution>
<id>add-module-infos</id>
<phase>generate-resources</phase>
<goals>
<goal>add-module-info</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/modules</outputDirectory>
<modules>
<module>
<artifact>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>2.1.214</version>
</artifact>
<moduleInfoSource>
module com.h2database {
requires java.compiler;
requires jdk.net;
requires static lucene.core;
requires static lucene.queryparser;
requires static slf4j.api;
requires static jakarta.servlet;
requires transitive java.desktop;
requires transitive java.instrument;
requires java.logging;
requires transitive java.management;
requires static java.naming;
requires transitive java.scripting;
requires java.sql;
requires transitive java.transaction.xa;
requires transitive java.xml;
requires static javax.servlet.api;
requires static org.locationtech.jts;
requires static org.osgi.service.jdbc;
requires static osgi.core;
provides java.sql.Driver with org.h2.Driver;
}
</moduleInfoSource>
</module>
</modules>
</configuration>
</execution>
</executions>
</plugin>