JDK-8167467 : javac gives misleading message when --add-exports specifies the wrong module name
  • Type: Enhancement
  • Component: tools
  • Sub-Component: javac
  • Affected Version: 9
  • Priority: P3
  • Status: Closed
  • Resolution: Duplicate
  • Submitted: 2016-10-10
  • Updated: 2016-11-16
  • Resolved: 2016-11-16
Related Reports
Duplicate :  
Description
Test source T.java:

public class T {
  public static void main(String args[]) {}
}


This works:
$ javac -J-showversion --add-exports jdk.unsupported/sun.misc=ALL-UNNAMED T.java 
java version "9-ea"
Java(TM) SE Runtime Environment (build 9-ea+139)
Java HotSpot(TM) 64-Bit Server VM (build 9-ea+139, mixed mode)

But this gives a misleading error message:
$ javac -J-showversion --add-exports foobar/sun.misc=ALL-UNNAMED T.java 
java version "9-ea"
Java(TM) SE Runtime Environment (build 9-ea+139)
Java HotSpot(TM) 64-Bit Server VM (build 9-ea+139, mixed mode)

error: module  reads package sun.misc from both jdk.unsupported and foobar
1 error

In comparison, the "java" tool gives an error message that's more meaningful:

$ java -showversion --add-exports jdk.unsupported/sun.misc=ALL-UNNAMED T
java version "9-ea"
Java(TM) SE Runtime Environment (build 9-ea+139)
Java HotSpot(TM) 64-Bit Server VM (build 9-ea+139, mixed mode)


$ java -showversion --add-exports foobar/sun.misc=ALL-UNNAMED T
Error occurred during initialization of VM
java.lang.RuntimeException: Unknown module: foobar
	at jdk.internal.module.ModuleBootstrap.fail(java.base@9-ea/ModuleBootstrap.java:566)
	at jdk.internal.module.ModuleBootstrap.addExtraExports(java.base@9-ea/ModuleBootstrap.java:480)
	at jdk.internal.module.ModuleBootstrap.boot(java.base@9-ea/ModuleBootstrap.java:319)
	at java.lang.System.initPhase2(java.base@9-ea/System.java:1927)







Comments
Fixed by http://hg.openjdk.java.net/jdk9/dev/langtools/rev/80b576bd3631 in JDK-8167975
16-11-2016

The output is already fixed: $ sh play/test.sh + javac -J-showversion --add-exports jdk.unsupported/sun.misc=ALL-UNNAMED T.java openjdk version "9-internal" OpenJDK Runtime Environment (build 9-internal+0-2016-11-14-142230.jjg.dev) OpenJDK 64-Bit Server VM (build 9-internal+0-2016-11-14-142230.jjg.dev, mixed mode) + javac -J-showversion --add-exports foobar/sun.misc=ALL-UNNAMED T.java openjdk version "9-internal" OpenJDK Runtime Environment (build 9-internal+0-2016-11-14-142230.jjg.dev) OpenJDK 64-Bit Server VM (build 9-internal+0-2016-11-14-142230.jjg.dev, mixed mode) warning: [options] module name in --add-exports option not found: foobar 1 warning + java -showversion --add-exports jdk.unsupported/sun.misc=ALL-UNNAMED T openjdk version "9-internal" OpenJDK Runtime Environment (build 9-internal+0-2016-11-14-142230.jjg.dev) OpenJDK 64-Bit Server VM (build 9-internal+0-2016-11-14-142230.jjg.dev, mixed mode) Error: Main method not found in class T, please define the main method as: public static void main(String[] args) or a JavaFX application class must extend javafx.application.Application + java -showversion --add-exports foobar/sun.misc=ALL-UNNAMED T WARNING: Unknown module: foobar openjdk version "9-internal" OpenJDK Runtime Environment (build 9-internal+0-2016-11-14-142230.jjg.dev) OpenJDK 64-Bit Server VM (build 9-internal+0-2016-11-14-142230.jjg.dev, mixed mode) Error: Main method not found in class T, please define the main method as: public static void main(String[] args) or a JavaFX application class must extend javafx.application.Application
16-11-2016

Attached a small script to capture Ioi's commands.
16-11-2016