Java 11 JLink 出现错误:自动模块不能与 jlink 一起使用:来自文件的 com.microsoft.sqlserver.jdbc

问题描述 投票:0回答:1

我正在尝试使用 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
。但是,我想知道是否有办法在其中注入一个?

java jdbc jlink
1个回答
0
投票

如果您使用的是 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>
© www.soinside.com 2019 - 2024. All rights reserved.