On 26/08/2016 09:52, Oliver Gondža wrote:

I am about to stretch support of my project from java 6, 7 and 8 to version 9 as well. It does not work there out of the box as it accesses sun.tools.attach.HotSpotVirtualMachine:

```
class MyClass (in unnamed module @0x4d14b6c2) cannot access class sun.tools.attach.HotSpotVirtualMachine (in module jdk.attach) because module jdk.attach does not export sun.tools.attach to unnamed module
@0x4d14b6c2.
```

Before I had a chance to experiment with introducing modules to my application and declaring dependency on jdk.attach, my project refuses to compile on java 9 as soon as I add module-info.java as I instruct javac to produce java 6 bytecode (-target 1.6 -source 1.6):

```
modules are not supported in -source 1.6; use -source 9 or higher to enable modules

You can invoke javac twice, as Uwe mentions. One starting point is:

javac -release 6 -d classes src/p/MyClass.java
javac -d classes src/module-info.java

The resulting classes should work with JDK 6+ on the class path, or as a module on the module path with JDK 9. The important thing with the second compilation is that you specify the same output directory as the compiler access to the source or class files when compiling the module declaration.

I see multi release JARs have been mentioned. This is also something to look at, assuming you end up with classes (beyond module-info) that are Java release specific.

In your mail then the class is "MyClass", I'm guessing this isn't really your actual class name. If it is then keep in mind that named modules require the classes to be in packages, you can't have types in the unnamed package in a named module.

On the attach API then the supported/documented API is com.sun.tools.attach. It's never been documented to make direct use of types in sun.tools.attach. Are you casting the VirtualMachine to a HotSpotVirtualMachine and hacking into implementation? It might be best to explain what you are doing. You can of temporarily break encapsulation to allow the above to compile/run with `--add-exports jdk.attach/sun.tools.attach=<target>", where <target> is your module name or ALL-UNNAMED if your library is on the class path.

-Alan

Reply via email to