繁体   English   中英

使模块jdk.incubator.httpclient在运行时可见

[英]Making the module jdk.incubator.httpclient visible at runtime

如何在运行时使模块jdk.incubator.httpclient的类可见?

我在用什么

Java 9 + Maven + HttpClient jdk.incubator.http.HttpClient

问题

=>使用jdk.incubator.HttpClient时,Maven构建失败。 固定的 这个问题,感谢@nullpointer

=>运行时堆栈跟踪:

java.lang.NoClassDefFoundError: jdk/incubator/http/HttpClient
at com.foo.Bar.Bar.<clinit>(Bar.java:56) ~[?:?]
at java.lang.Class.forName0(java.base@9-Ubuntu/Native Method) ~[?:?]
at java.lang.Class.forName(java.base@9-Ubuntu/Class.java:374) ~[?:?]
Caused by: java.lang.ClassNotFoundException: jdk.incubator.http.HttpClient
at java.net.URLClassLoader.findClass(java.base@9-Ubuntu/URLClassLoader.java:388) ~[?:?]
at java.lang.ClassLoader.loadClass(java.base@9-Ubuntu/ClassLoader.java:486) ~[?:?]
at java.lang.ClassLoader.loadClass(java.base@9-Ubuntu/ClassLoader.java:419) ~[?:?]
at com.foo.Bar.Bar.<clinit>(Bar.java:56) ~[?:?]
at java.lang.Class.forName0(java.base@9-Ubuntu/Native Method) ~[?:?]
at java.lang.Class.forName(java.base@9-Ubuntu/Class.java:374) ~[?:?]

构建Pom部分

<build>
    <finalName>${project.artifactId}</finalName>
    <sourceDirectory>${project.basedir}/src</sourceDirectory>

    <resources>
        <resource>
            <targetPath>.</targetPath>
            <filtering>true</filtering>
            <directory>${project.basedir}/resources</directory>

            <includes>
                <include>plugin.yml</include>
            </includes>
        </resource>
    </resources>

    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-clean-plugin</artifactId>
            <version>3.0.0</version>
        </plugin>

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.7.0</version>

            <configuration>
                <source>9</source>
                <target>9</target>
            </configuration>
        </plugin>

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <version>3.1.0</version>

            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>shade</goal>
                    </goals>
                    <configuration>
                        <minimizeJar>true</minimizeJar>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

正如您所看到的,我正在使用maven-shade-plugin作为我的依赖项,但由于jdk.incubator.http.HttpClient是JDK的一部分,因此它不包含在我的jar中。

试图执行:

 java -jar --add-modules jdk.incubator.httpclient uhc-staging.jar

结果如下:

 Error occurred during initialization of VM java.lang.module.ResolutionException: Module jdk.incubator.httpclient not found at java.lang.module.Resolver.fail(java.base@9-Ubuntu/Resolver.java:790) at java.lang.module.Resolver.resolveRequires(java.base@9-Ubuntu/Resolver.java:94) at java.lang.module.Configuration.resolveRequiresAndUses(java.base@9-Ubuntu/Configuration.java:370) at java.lang.module.ModuleDescriptor$1.resolveRequiresAndUses(java.base@9-Ubuntu/ModuleDescriptor.java:1986) at jdk.internal.module.ModuleBootstrap.boot(java.base@9-Ubuntu/ModuleBootstrap.java:263) at java.lang.System.initPhase2(java.base@9-Ubuntu/System.java:1927) 

讨论中 ,提出的细节是执行: -

java --list-modules

不包含jdk.incubator.httpclient作为模块,这就是抛出jlmResolutionException的原因。 因此,对此的解决方案是升级安装到最新版本的JDK版本(应该包括孵化器模块),然后尝试使用建议的相同命令运行应用程序: -

java -jar --add-modules jdk.incubator.httpclient uhc-staging.jar

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM