我正在尝试使用 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;
Run Code Online (Sandbox Code Playgroud)
然而,当我尝试清理+构建时,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
Run Code Online (Sandbox Code Playgroud)
我很确定这是因为 jar 没有编译的module-info.java. 但是,我想知道是否有办法在那里注入一个?
小智 1
如果您使用 Maven,则可以使用moditect 插件add-module-info的目标。下面是我用来使 h2 jdbc 驱动程序和引擎与 jlink 一起工作的 pom.xml 片段。该插件在 ${project.build.directory}/modules 中创建插件的修补副本,然后可以将其 jlinked 进去。我必须自己创建该部分。为此,我使用了、目标和检查清单文件来计算出需要的语句等 - 为了使这些语句起作用,您必须包含您尝试 jlink 的 JDBC jar 的所有依赖项。H2 有很多“可选”功能 - 我必须手动将这些功能标记为静态。所有这些都非常乏味,但是如果您对 SQL Server JDBC 驱动程序执行相同的操作,它应该适用于未来的版本,直到发布官方模块化组件:moduleInfoSourcejdeps --multi-release=11java --describe-modulemoditect:generate-module-info
<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>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4200 次 |
| 最近记录: |