3

我正在使用一种新的随机生成器算法(https://openjdk.java.net/jeps/356):

RandomGeneratorFactory.of("L128X1024MixRandom").create().nextDouble();

它有效。使用 jpackage 工具后除外(https://openjdk.java.net/jeps/392

我得到异常

没有可用的随机生成器算法“L128X1024MixRandom”的实现

我尝试uses在我的 module-info.java (https://docs.oracle.com/javase/specs/jls/se17/html/jls-7.html#jls-7.7.3)中添加指令以指定使用该服务

uses java.util.random.RandomGenerator;

但这并不能解决它或似乎在那里很重要(我用错了吗?我认为这应该是解决方案)。

相反,我必须添加 jpackage 选项: --add-modules jdk.random

复制步骤

1. 用文件创建目录:

rngTest/com/example/Test.java

package com.example;

import javax.swing.JOptionPane;
import java.util.random.RandomGeneratorFactory;

public class Test {
    public static void main(String[] args) throws Exception {
        try {
            JOptionPane.showMessageDialog(null, "nextDouble: " + RandomGeneratorFactory.of("L128X1024MixRandom").create().nextDouble());
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null, "Exception: " + e.getMessage());
        }
    }
}

rngTest/module-info.java

module com.example {
    requires java.desktop;
    uses java.util.random.RandomGenerator;
}

rngTest/manifest.txt

Manifest-Version: 1.0
Created-By: 17.0.1
Build-Jdk-Spec: 17
Main-Class: com.example.Test

2.从rngTest目录运行命令

(对于 macOS。需要--type dmg针对其他平台进行更改,请参阅https://openjdk.java.net/jeps/392

find . -name "*.java" > sources.txt
javac @sources.txt -d target
mkdir -p lib; cd target; jar cfm ../lib/test.jar ../manifest.txt *; cd ..
${JAVA_HOME}/bin/jpackage --module-path lib --module com.example/com.example.Test --type dmg --name Test

3.运行创建的安装程序,然后运行安装的应用程序

注意异常消息。

现在重新运行 jpackage 命令,--add-modules jdk.random然后重复步骤 3,注意成功。

${JAVA_HOME}/bin/jpackage --module-path lib --module com.example/com.example.Test --type dmg --name Test --add-modules jdk.random
4

1 回答 1

0

我曾尝试添加requires jdk.random;到我的 module-info.java

它无法编译并出现错误“找不到模块:jdk.random”

(我认为它的访问受到限制,只能导出到 java.base)

但那是 maven-compiler-plugin:3.8.1

事实证明它确实可以使用 javac 编译并且可以。

所以可能是 maven-compiler-plugin 的错误。

但我仍然认为该uses指令应该有效。我需要使用 maven-compiler-plugin。

于 2021-12-09T04:25:36.073 回答