RFR: 8340133: Investigate if the java launcher could give hints about JShell [v3]

Roger Riggs rriggs at openjdk.org
Wed Oct 16 18:04:15 UTC 2024


On Wed, 16 Oct 2024 14:55:34 GMT, Jan Lahoda <jlahoda at openjdk.org> wrote:

>> Currently, running `java` without any parameters will lead to an output that is a full `--help`, which is over 100 lines (on my computer at least), and it feels overwhelming. And many people might actually want to run JShell/REPL, not the `java` launcher, but it is difficult find out about JShell.
>> 
>> The proposal herein is to print a much shorter help, together with a pointer to JShell, when the launcher does not know what to do. I.e. there is nothing specified to start, and no option like `--help` is specified. In particular, on my machine, it prints:
>> 
>> $ java
>> openjdk 24-internal 2025-03-18
>> 
>> Usage: java [java options...] <application> [application arguments...]
>> 
>> Where <application> is one of:
>>   <MainClass>                to execute the main method of a compiled class
>>   -jar <JarFile>.jar         to execute the main class of a JAR archive
>>   -m <module>[/<MainClass>]  to execute the main class of a module
>>   <SourceFile>.java          to compile and execute a single-file program
>> 
>> Where key java options include:
>>   --class-path <class path>
>>       a ":"-separated list of directories and JAR archives to search for class files
>>   --module-path <module path>
>>       a ":"-separated list of directories and JAR archives to search for modules
>> 
>> For more details about this launcher:   java --help
>> For an interactive Java environment:    jshell
>> 
>> 
>> Hopefully, this may be easier both for people trying to run something, and for people that are really looking for JShell.
>> 
>> What do you think?
>> 
>> Thanks!
>
> Jan Lahoda has updated the pull request incrementally with one additional commit since the last revision:
> 
>   Adjusting the concise help as suggested: 'using main class of a JAR archive' and '<JarFile>.jar'/'<SourceFile>.java'

src/java.base/share/native/libjli/java.c line 1924:

> 1922:  */
> 1923: static void
> 1924: PrintUsage(JNIEnv* env, jboolean doXUsage, jboolean conciseUsage)

This would be cleaner to replace the booleans with an enum (concise, X, full).
Since conciseUsage overrides doXusage, then it should preceed Xusage in the argument list.

-------------

PR Review Comment: https://git.openjdk.org/jdk/pull/21411#discussion_r1803573091


More information about the core-libs-dev mailing list