-
Bug
-
Resolution: Unresolved
-
P4
-
None
-
20
-
None
The `--enable-native-access` flag only applies to the boot layer, not to ModuleLayers created programmatically. Yet, `Module.ensureNativeAccess` suggests to add `--enable-native-access <module>` even if <module> is in a different module layer. Example:
```
java --module-path example.jar:main.jar --enable-native-access example --enable-native-access otherexample --module main/main.Main
WARNING: Unknown module: otherexample specified to --enable-native-access
module main
module example
Hello com.example.Main
module otherexample
Hello com.example.Main
WARNING: A restricted method in java.lang.System has been called
WARNING: java.lang.System::load has been called by com.example.Main in module otherexample (file:example2.jar)
WARNING: Use --enable-native-access=otherexample to avoid a warning for callers in this module
WARNING: Restricted methods will be blocked in a future release unless native access is enabled
```
The reproducer can be found here https://github.com/zapster/module-layer-native-access-example/tree/module-layer-warning
The `otherexample` module is in a different ModuleLayer created in `main.Main`, thus `--enable-native-access otherexample` will not work. Even worse, it is leading to another conflicting warning.
Since it seems intentional that `--enable-native-access` only applies to the boot layer, I believe the warning/error printing code should check whether the module is on the boot layer and if not omit the suggestion or print a different one.
AFAIK, the check was introduce inJDK-8295044 and recently update by JDK-8331671.
```
java --module-path example.jar:main.jar --enable-native-access example --enable-native-access otherexample --module main/main.Main
WARNING: Unknown module: otherexample specified to --enable-native-access
module main
module example
Hello com.example.Main
module otherexample
Hello com.example.Main
WARNING: A restricted method in java.lang.System has been called
WARNING: java.lang.System::load has been called by com.example.Main in module otherexample (file:example2.jar)
WARNING: Use --enable-native-access=otherexample to avoid a warning for callers in this module
WARNING: Restricted methods will be blocked in a future release unless native access is enabled
```
The reproducer can be found here https://github.com/zapster/module-layer-native-access-example/tree/module-layer-warning
The `otherexample` module is in a different ModuleLayer created in `main.Main`, thus `--enable-native-access otherexample` will not work. Even worse, it is leading to another conflicting warning.
Since it seems intentional that `--enable-native-access` only applies to the boot layer, I believe the warning/error printing code should check whether the module is on the boot layer and if not omit the suggestion or print a different one.
AFAIK, the check was introduce in
- relates to
-
JDK-8295044 Implementation of Foreign Function and Memory API (Second Preview)
- Resolved
-
JDK-8331671 Implement JEP 472: Prepare to Restrict the Use of JNI
- Resolved