IdealGraphVisualizer(IGV) README says that
1. The tool is built on top of the NetBeans Platform, and requires a JDK version between 11 and 17 (the JDKs supported by the current NetBeans Platform).
2. To build and run IGV on a different JDK than the system default, set first the
`JAVA_HOME` to the appropriate directory. The same JDK version should be used for building and running IGV.
Project XML enforces this using 'maven-enforcer-plugin'.
<id>enforce-java</id>
<goals>
<goal>enforce</goal>
</goals>
<configuration>
<rules>
<requireJavaVersion>
<version>[11,18)</version>
<message>IGV requires a JDK version between 11 and 17</message>
</requireJavaVersion>
</rules>
</configuration>
however, it's not completely true. We will run into problem when IGV tries to load filters, which are written in javascript.
I believe this is caused byJDK-8241749, so we can't run with jdk15+.
[INFO] WARNING: Cannot find Filter component. It will not be located properly in the window system.
[INFO] SEVERE [global]
[INFO] java.lang.NullPointerException: Cannot invoke "javax.script.ScriptEngine.eval(String)" because "this.engine" is null
[INFO] at com.sun.hotspot.igv.filterwindow.FilterTopComponent.<init>(FilterTopComponent.java:350)
[INFO] at com.sun.hotspot.igv.filterwindow.FilterTopComponent.getDefault(FilterTopComponent.java:548)
[INFO] at com.sun.hotspot.igv.filterwindow.FilterTopComponent.findInstance(FilterTopComponent.java:560)
[INFO] at com.sun.hotspot.igv.filterwindow.FilterChainProviderImplementation.getFilterChain(FilterChainProviderImplementation.java:39)
[INFO] at com.sun.hotspot.igv.view.EditorTopComponent.<init>(EditorTopComponent.java:178)
[INFO] at com.sun.hotspot.igv.view.GraphViewerImplementation.view(GraphViewerImplementation.java:71)
[INFO] at com.sun.hotspot.igv.coordinator.actions.GraphOpenCookie.open(GraphOpenCookie.java:42)
[INFO] at org.openide.actions.OpenAction.performAction(OpenAction.java:59)
[INFO] at org.openide.util.actions.NodeAction$DelegateAction$1.run(NodeAction.java:561)
[INFO] at org.openide.util.actions.ActionInvoker$1.run(ActionInvoker.java:70)
[INFO] at org.openide.util.actions.ActionInvoker.doPerformAction(ActionInvoker.java:91)
[INFO] at org.openide.util.actions.ActionInvoker.invokeAction(ActionInvoker.java:74)
[INFO] at org.openide.util.actions.NodeAction$DelegateAction.actionPerformed(NodeAction.java:558)
[INFO] at org.openide.explorer.view.TreeView$PopupSupport.mouseClicked(TreeView.java:1608)
[INFO] at java.desktop/java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:278)
[INFO] at java.desktop/java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:277)
[INFO] at java.desktop/java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:277)
[INFO] at java.desktop/java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:277)
[INFO] at java.desktop/java.awt.Component.processMouseEvent(Component.java:6617)
[INFO] at java.desktop/javax.swing.JComponent.processMouseEvent(JComponent.java:3342)
[INFO] at java.desktop/java.awt.Component.processEvent(Component.java:6379)
[INFO] at java.desktop/java.awt.Container.processEvent(Container.java:2263)
[INFO] at java.desktop/java.awt.Component.dispatchEventImpl(Component.java:4990)
[INFO] at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2321)
[INFO] at java.desktop/java.awt.Component.dispatchEvent(Component.java:4822)
[INFO] at java.desktop/java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4919)
[INFO] at java.desktop/java.awt.LightweightDispatcher.processMouseEvent(Container.java:4557)
[INFO] at java.desktop/java.awt.LightweightDispatcher.dispatchEvent(Container.java:4489)
[INFO] at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2307)
[INFO] at java.desktop/java.awt.Window.dispatchEventImpl(Window.java:2769)
[INFO] at java.desktop/java.awt.Component.dispatchEvent(Component.java:4822)
[INFO] at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:772)
[INFO] at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721)
[INFO] at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:715)
[INFO] at java.base/java.security.AccessController.doPrivileged(AccessController.java:391)
[INFO] at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
[INFO] at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:95)
[INFO] at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:745)
[INFO] at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:743)
[INFO] at java.base/java.security.AccessController.doPrivileged(AccessController.java:391)
[INFO] at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
[INFO] at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:742)
[INFO] at org.netbeans.core.TimableEventQueue.dispatchEvent(TimableEventQueue.java:136)
[INFO] [catch] at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
[INFO] at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
[INFO] at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
[INFO] at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
[INFO] at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
[INFO] at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
1. The tool is built on top of the NetBeans Platform, and requires a JDK version between 11 and 17 (the JDKs supported by the current NetBeans Platform).
2. To build and run IGV on a different JDK than the system default, set first the
`JAVA_HOME` to the appropriate directory. The same JDK version should be used for building and running IGV.
Project XML enforces this using 'maven-enforcer-plugin'.
<id>enforce-java</id>
<goals>
<goal>enforce</goal>
</goals>
<configuration>
<rules>
<requireJavaVersion>
<version>[11,18)</version>
<message>IGV requires a JDK version between 11 and 17</message>
</requireJavaVersion>
</rules>
</configuration>
however, it's not completely true. We will run into problem when IGV tries to load filters, which are written in javascript.
I believe this is caused by
[INFO] WARNING: Cannot find Filter component. It will not be located properly in the window system.
[INFO] SEVERE [global]
[INFO] java.lang.NullPointerException: Cannot invoke "javax.script.ScriptEngine.eval(String)" because "this.engine" is null
[INFO] at com.sun.hotspot.igv.filterwindow.FilterTopComponent.<init>(FilterTopComponent.java:350)
[INFO] at com.sun.hotspot.igv.filterwindow.FilterTopComponent.getDefault(FilterTopComponent.java:548)
[INFO] at com.sun.hotspot.igv.filterwindow.FilterTopComponent.findInstance(FilterTopComponent.java:560)
[INFO] at com.sun.hotspot.igv.filterwindow.FilterChainProviderImplementation.getFilterChain(FilterChainProviderImplementation.java:39)
[INFO] at com.sun.hotspot.igv.view.EditorTopComponent.<init>(EditorTopComponent.java:178)
[INFO] at com.sun.hotspot.igv.view.GraphViewerImplementation.view(GraphViewerImplementation.java:71)
[INFO] at com.sun.hotspot.igv.coordinator.actions.GraphOpenCookie.open(GraphOpenCookie.java:42)
[INFO] at org.openide.actions.OpenAction.performAction(OpenAction.java:59)
[INFO] at org.openide.util.actions.NodeAction$DelegateAction$1.run(NodeAction.java:561)
[INFO] at org.openide.util.actions.ActionInvoker$1.run(ActionInvoker.java:70)
[INFO] at org.openide.util.actions.ActionInvoker.doPerformAction(ActionInvoker.java:91)
[INFO] at org.openide.util.actions.ActionInvoker.invokeAction(ActionInvoker.java:74)
[INFO] at org.openide.util.actions.NodeAction$DelegateAction.actionPerformed(NodeAction.java:558)
[INFO] at org.openide.explorer.view.TreeView$PopupSupport.mouseClicked(TreeView.java:1608)
[INFO] at java.desktop/java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:278)
[INFO] at java.desktop/java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:277)
[INFO] at java.desktop/java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:277)
[INFO] at java.desktop/java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:277)
[INFO] at java.desktop/java.awt.Component.processMouseEvent(Component.java:6617)
[INFO] at java.desktop/javax.swing.JComponent.processMouseEvent(JComponent.java:3342)
[INFO] at java.desktop/java.awt.Component.processEvent(Component.java:6379)
[INFO] at java.desktop/java.awt.Container.processEvent(Container.java:2263)
[INFO] at java.desktop/java.awt.Component.dispatchEventImpl(Component.java:4990)
[INFO] at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2321)
[INFO] at java.desktop/java.awt.Component.dispatchEvent(Component.java:4822)
[INFO] at java.desktop/java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4919)
[INFO] at java.desktop/java.awt.LightweightDispatcher.processMouseEvent(Container.java:4557)
[INFO] at java.desktop/java.awt.LightweightDispatcher.dispatchEvent(Container.java:4489)
[INFO] at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2307)
[INFO] at java.desktop/java.awt.Window.dispatchEventImpl(Window.java:2769)
[INFO] at java.desktop/java.awt.Component.dispatchEvent(Component.java:4822)
[INFO] at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:772)
[INFO] at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721)
[INFO] at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:715)
[INFO] at java.base/java.security.AccessController.doPrivileged(AccessController.java:391)
[INFO] at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
[INFO] at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:95)
[INFO] at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:745)
[INFO] at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:743)
[INFO] at java.base/java.security.AccessController.doPrivileged(AccessController.java:391)
[INFO] at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
[INFO] at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:742)
[INFO] at org.netbeans.core.TimableEventQueue.dispatchEvent(TimableEventQueue.java:136)
[INFO] [catch] at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
[INFO] at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
[INFO] at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
[INFO] at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
[INFO] at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
[INFO] at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)