RFR: 8340133: Add concise usage message to the java executable [v5]

Jaikiran Pai jpai at openjdk.org
Thu Oct 24 10:13:07 UTC 2024


On Tue, 22 Oct 2024 11:06:44 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` executable, 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 executable 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:
>> 
>> 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 source-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 additional help on usage:           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:
> 
>   Cleaning up the concise message:
>   - using 2 spaces instead of 4,
>   - rewording the "for more use --help" part of the message as suggested to avoid the word "launcher".

Hello Jan, the updated changes look good to me. 

The copyright year on the template file will need an update. I've one trivial question about the code which I've added inline.

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

> 544: 
> 545:     /* If the user specified neither a class name nor a JAR file */
> 546:     if (printUsageKind != HELP_NONE) {

Is the state check for `what` and `mode` no longer needed here?

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

Marked as reviewed by jpai (Reviewer).

PR Review: https://git.openjdk.org/jdk/pull/21411#pullrequestreview-2391994094
PR Review Comment: https://git.openjdk.org/jdk/pull/21411#discussion_r1814692281


More information about the core-libs-dev mailing list