Pytanie
Jak mogę dokonać zajęcia z modułu jdk.incubator.httpclient
widoczne w czasie wykonywania?Dokonywanie jdk.incubator.httpclient moduł widoczny przy starcie
Co Używam
Java Maven + 9 + HttpClient jdk.incubator.http.HttpClient
Problemy
=> Maven build uszkodzoną podczas korzystania jdk.incubator.HttpClient
. Poprawiono z this question dzięki @nullpointer
=> Runtime StackTrace:
java.lang.NoClassDefFoundError: jdk/incubator/http/HttpClient
at com.foo.Bar.Bar.<clinit>(Bar.java:56) ~[?:?]
at java.lang.Class.forName0([email protected]/Native Method) ~[?:?]
at java.lang.Class.forName([email protected]/Class.java:374) ~[?:?]
Caused by: java.lang.ClassNotFoundException: jdk.incubator.http.HttpClient
at java.net.URLClassLoader.findClass([email protected]/URLClassLoader.java:388) ~[?:?]
at java.lang.ClassLoader.loadClass([email protected]/ClassLoader.java:486) ~[?:?]
at java.lang.ClassLoader.loadClass([email protected]/ClassLoader.java:419) ~[?:?]
at com.foo.Bar.Bar.<clinit>(Bar.java:56) ~[?:?]
at java.lang.Class.forName0([email protected]/Native Method) ~[?:?]
at java.lang.Class.forName([email protected]/Class.java:374) ~[?:?]
Konstruowanie Sekcja 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>
Jak widać, używam maven-shade-plugin
dla moich uzależnień, ale ponieważ jdk.incubator.http.HttpClient
jest częścią JDK, nie ma go w moim słoiku.
próby wykonania jako:
java -jar --add-modules jdk.incubator.httpclient uhc-staging.jar
wyniki na następującym wyjątkiem:
Error occurred during initialization of VM java.lang.module.ResolutionException: Module jdk.incubator.httpclient not found at java.lang.module.Resolver.fail([email protected]/Resolver.java:790) at java.lang.module.Resolver.resolveRequires([email protected]/Resolver.java:94) at java.lang.module.Configuration.resolveRequiresAndUses([email protected]/Configuration.java:370) at java.lang.module.ModuleDescriptor$1.resolveRequiresAndUses([email protected]/ModuleDescriptor.java:1986) at jdk.internal.module.ModuleBootstrap.boot([email protected]/ModuleBootstrap.java:263) at java.lang.System.initPhase2([email protected]/System.java:1927)
@nullpointer The słoiku jest używany jako dodatek. Istnieje metoda 'enable()', która jest wywoływana, gdy proces główny ją włącza. Głównym procesem jest kolejny plik jar, który zaczyna się od 'java -jar server.jar' –
@nullpointer Przepraszamy za bycie zbyt krótkim. Mój jar jest używany jako wtyczka do api Bukkit. Kiedy uruchamia się serwer Bukkit, ładuje wszystkie wtyczki, w tym moje, i wywołuje metodę 'enable()'. W mojej metodzie enable zaczynam od wywołania mojego api z HttpClient, aby załadować pewne informacje o uprawnieniach użytkownika. –
Idealnie powinieneś zaktualizować pytanie z częścią integracyjną bieżącego słoika z Bukkitem i użytym tam kodem. [Chociaż, szczerze, nie jestem zbyt świadomy tego, jak działa Bukkit.] – nullpointer