为什么 --limit-modules 对我不起作用?

Why doesn't --limit-modules work for me?

我有以下程序:

package org.example;

import com.google.common.primitives.Ints; // This is a guava class

public class Example {
    public static void main(String[] __) {
        System.out.println(Ints.class);
    }
}

当我运行这个程序作为自动模块时,一切正常:

> java -p myapp.jar;guava.jar -m myapp/org.example.Example
class com.google.common.primitives.Ints

但是当我使用 --limit-modules 时,程序仍然 运行ning fine:

> java -p myapp.jar;guava.jar --limit-modules myapp -m myapp/org.example.Example
class com.google.common.primitives.Ints

不应该是这样的:

java.lang.NoClassDefFoundError: com/google/common/primitives/Ints

?

来自 JEP 261:"The effect of this option is to limit the observable modules to those in the transitive closure of the named modules plus the main module, if any, plus any further modules specified via the --add-modules option."

题中初始模块为自动模块。自动模块已解决 "as if" 它们需要所有可观察到的自动模块。这就是为什么 --limit-modules myapp 等价于 --limit-modules myapp,<all-automatic-modules>.