是否可以提取JDK系统模块并将其用作独立的应用程序模块/ JAR文件?

问题

我正在使用AdoptOpenJDK的JRE 11 *运行我的应用程序。该应用程序使用JavaFX,它需要JDK的系统模块jdk.unsupported.desktop。在提到的JRE中不存在此模块。我想知道是否有可能从SDK中提取该单个模块并将其包含在非模块化应用程序中

*采用不仅发布JDK,而且发布JRE

我尝试过的

我已经使用jlink构建了包括缺少模块的自定义JRE,它解决了我的问题。但是,我仍然想使用预先构建的Adopt JRE代替我需要自己创建的自定义JRE。

问题

是否可以从JDK中“提取”一个模块并将其在非模块化应用程序中用作应用程序模块或常规的“第三方”罐子?

xcmk27 回答:是否可以提取JDK系统模块并将其用作独立的应用程序模块/ JAR文件?

我不知道将平台模块转换为独立JAR的任何“官方”方式。但是我相信您可以解压缩文件jdk-11/jmods/jdk.unsupported.desktop.jmod并将其重新打包为JAR文件。

  • jdk-11/jmods/jdk.unsupported.desktop.jmod复制到临时文件jdk.unsupported.desktop.zip
  • 解压缩jdk.unsupported.desktop.zip
  • 将目录jdk.unsupported.desktop/classes中的类压缩为jdk.unsupported.desktop.jar

现在,如果将jdk.unsupported.desktop.jar放在类路径中,它应该可以在JRE 11中使用。

,

我还有其他关于 java.desktop 模块的问题 - 如果我想深入了解模块系统,并且会尝试出于教育目的仅提取/分离该 java.desktop 模块的“javax.sound”部分以创建我自己的 javax在不需要整个 java.desktop 模块的 javafx 应用程序中使用的 .sound 模块 - 怎么做?我首先尝试重新编译 module-info.java 并在那里进行了预期的更改,但我还没有成功......是的,我知道这是唯一的学术辩论,因为我可能无法在任何地方重新分发它,对吗?

修改后的 module-info.java(由 javap 反编译)是这样的:(我不知道导入,我添加了它们并留在那里比现在需要的更多,但我的 javac 命令行仍然抱怨......

import javax.sound.midi.*;
import javax.sound.midi.spi.*;
import javax.sound.sampled.*;
import javax.sound.sampled.spi.*;
import com.sun.media.sound.*;


module javax.sound {
  requires java.base;
  requires java.prefs;
  requires transitive java.datatransfer;
  requires transitive java.xml;

  exports javax.sound.midi;
  exports javax.sound.midi.spi;
  exports javax.sound.sampled;
  exports javax.sound.sampled.spi;

  uses javax.sound.midi.spi.MidiDeviceProvider;
  uses javax.sound.midi.spi.MidiFileReader;
  uses javax.sound.midi.spi.MidiFileWriter;
  uses javax.sound.midi.spi.SoundbankReader;
  uses javax.sound.sampled.spi.AudioFileReader;
  uses javax.sound.sampled.spi.AudioFileWriter;
  uses javax.sound.sampled.spi.FormatConversionProvider;
  uses javax.sound.sampled.spi.MixerProvider;

  provides  javax.sound.midi.spi.MidiDeviceProvider with
    com.sun.media.sound.MidiInDeviceProvider,com.sun.media.sound.MidiOutDeviceProvider,com.sun.media.sound.RealTimeSequencerProvider,com.sun.media.sound.SoftProvider;
  provides  javax.sound.midi.spi.MidiFileReader with
    com.sun.media.sound.StandardMidiFileReader;
  provides  javax.sound.midi.spi.MidiFileWriter with
    com.sun.media.sound.StandardMidiFileWriter;
  provides  javax.sound.midi.spi.SoundbankReader with
    com.sun.media.sound.AudioFileSoundbankReader,com.sun.media.sound.DLSSoundbankReader,com.sun.media.sound.JARSoundbankReader,com.sun.media.sound.SF2SoundbankReader;
  provides  javax.sound.sampled.spi.AudioFileReader with
    com.sun.media.sound.AiffFileReader,com.sun.media.sound.AuFileReader,com.sun.media.sound.SoftMidiAudioFileReader,com.sun.media.sound.WaveFileReader,com.sun.media.sound.WaveFloatFileReader,com.sun.media.sound.WaveExtensibleFileReader;
  provides  javax.sound.sampled.spi.AudioFileWriter with
    com.sun.media.sound.AiffFileWriter,com.sun.media.sound.AuFileWriter,com.sun.media.sound.WaveFileWriter,com.sun.media.sound.WaveFloatFileWriter;
  provides  javax.sound.sampled.spi.FormatConversionProvider with
    com.sun.media.sound.AlawCodec,com.sun.media.sound.AudioFloatFormatConverter,com.sun.media.sound.PCMtoPCMCodec,com.sun.media.sound.UlawCodec;
  provides  javax.sound.sampled.spi.MixerProvider with
    com.sun.media.sound.DirectAudioDeviceProvider,com.sun.media.sound.PortMixerProvider;
}

这还不行:javac -p %JAVA_HOME\jmod% module-info.java

module-info.java:1: error: package javax.sound.midi is not visible
import javax.sound.midi.*;
                  ^
  (package javax.sound.midi is declared in the unnamed module,but module javax.sound does not read it)
module-info.java:2: error: package javax.sound.midi.spi is not visible
import javax.sound.midi.spi.*;
                       ^
  (package javax.sound.midi.spi is declared in the unnamed module,but module javax.sound does not read it)
module-info.java:3: error: package javax.sound.sampled is not visible
import javax.sound.sampled.*;
                  ^
  (package javax.sound.sampled is declared in the unnamed module,but module javax.sound does not read it)
module-info.java:4: error: package javax.sound.sampled.spi is not visible
import javax.sound.sampled.spi.*;
本文链接:https://www.f2er.com/3102722.html

大家都在问