JShell: packages

Maurizio Cimadamore maurizio.cimadamore at oracle.com
Fri Sep 18 10:22:03 UTC 2015


I suggest we restart from scratch - I don't know where the problem is 
exactly, but I don't see why the following is failing:


$ <JDK9_HOME>/bin/java 
-Xbootclasspath/p:<KULLA_JDK_BUILD>/jdk/modules/*jdk.jshell*:<KULLA_JDK_BUILD>/jdk/modules/*jdk.compiler*:<KULLA_JDK_BUILD>/jdk/modules/*java.compiler*jdk.internal.jshell.tool.JShellTool
Exception in thread "main" java.lang.NoClassDefFoundError: 
jdk/internal/jline/TerminalFactory$Flavor
     at 
jdk.internal.jshell.tool.ConsoleIOContext.<init>(ConsoleIOContext.java:70)
     at jdk.internal.jshell.tool.JShellTool.start(JShellTool.java:242)
     at jdk.internal.jshell.tool.JShellTool.main(JShellTool.java:233)


Why is the tool failing to locate jline? Note that JDK9 home is a recent 
JDK9 repo which has the jdk.internal.le package.

By any chance, maybe jline is not part of rt.jar?

Maurizio

On 18/09/15 02:08, Jonathan Gibbons wrote:
> Then I am indeed confused as to the issue/interaction between 
> -Xbootclasspath/p: and .jimage files.
>
> -- Jon
>
> On 09/17/2015 05:55 PM, Robert Field wrote:
>>
>> Jline is already in its own jdk.internal package.
>>
>> On September 17, 2015 5:25:27 PM Jonathan Gibbons 
>> <jonathan.gibbons at oracle.com> wrote:
>>
>>> If the problem is just with jline, I was thinking we should 
>>> temporarily put it in its own package, such as jdk.internal.jline, 
>>> and leave alone the packages that Robert listed.
>>>
>>> Or am I missing something here? (again?)
>>>
>>> -- Jon
>>>
>>> On 09/17/2015 05:20 PM, Maurizio Cimadamore wrote:
>>>>
>>>>
>>>> On 17/09/15 19:52, Jonathan Gibbons wrote:
>>>>> We should not change any of these packages.
>>>> Now I'm confused :-)
>>>>
>>>> As you say, we need a workaround for the Xbootclasspath issue - the 
>>>> simpler workaround would be to change the way jshell uses 
>>>> jdk.internal package names; I'm assuming fixing the bootstrap vs. 
>>>> jimage issue would take much longer.
>>>>
>>>> So, what do you mean by "we should not change any of these packages" ?
>>>>
>>>> Maurizio
>>>>>
>>>>> My understanding from Maurizio is that there is a bug or 
>>>>> anti-feature in the system today such that the choice of package 
>>>>> for jline is problematic, and so we were simply discussing the 
>>>>> possibility of using a different package for jline for the 
>>>>> immediate short term as a workaround for the -Xbootclasspath/p: 
>>>>> issue.   When Jigsaw gets integrated, the -Xbootclasspath/p: 
>>>>> option will go away, and we will have to use the new -Xoverride 
>>>>> option instead.   In advance of that, we should ensure that 
>>>>> -Xoverride works in a way that is satisfactory with jline in its 
>>>>> propoer long term home.
>>>>>
>>>>> -- Jon
>>>>>
>>>>> On 09/17/2015 11:08 AM, Robert Field wrote:
>>>>>> There were extensive discussions and approvals around package 
>>>>>> names.  This is what we have now:
>>>>>>
>>>>>> jdk.jshell
>>>>>>
>>>>>>     JShell API and core implementation.
>>>>>>
>>>>>> jdk.internal.jshell.remote
>>>>>>
>>>>>>     The remote side of the implementation
>>>>>>
>>>>>> jdk.internal.jshell.debug
>>>>>>
>>>>>>     Single class supporting debugging of the implementation
>>>>>>     through external tools
>>>>>>
>>>>>> jdk.internal.jshell.tool
>>>>>>
>>>>>>     The JShell tool (built on the API)
>>>>>>
>>>>>>
>>>>>> The package jdk.jshell has all the public API.
>>>>>>
>>>>>> jdk.internal.jshell.* includes some classes with public access 
>>>>>> modifiers but these packages are not public APIs (we want the 
>>>>>> ability to change them as needed) -- my understanding is that 
>>>>>> packages with those characteristics should be named "jdk.internal.*".
>>>>>>
>>>>>> -----
>>>>>>
>>>>>> However we have problems --
>>>>>>
>>>>>>>     some weird bug I encountered where if I set bootclasspath
>>>>>>>     that mentions some jdk.internal classes (but which doesn't
>>>>>>>     have JLine - because it comes from langtools), _every_ class
>>>>>>>     from that package will not be fetched from the jimage file -
>>>>>>>     meaning that I'll be left w/o jline. In other words,
>>>>>>>     bootstrapping doesn't work - and I have reasons to believe
>>>>>>>     that bootstrapping with the new module options (when they
>>>>>>>     will become available - i.e. moduleOverride) won't work too. 
>>>>>>
>>>>>>
>>>>>> and the proposal --
>>>>>>
>>>>>>>     * workaround problem #1 by putting jshell in a package other
>>>>>>>     than jdk.internal (i.e. jdk.jshell could be good); this will
>>>>>>>     avoid -Xbootstrap accidentally making jline unavailable 
>>>>>>
>>>>>>
>>>>>> -Robert
>>>>>>
>>>>>>
>>>>>
>>>>
>>>
>



More information about the kulla-dev mailing list