RFR: 8340133: Add concise usage message to the java executable [v7]
Magnus Ihse Bursie
ihse at openjdk.org
Tue Nov 12 13:51:58 UTC 2024
On Mon, 11 Nov 2024 14:23:46 GMT, Alan Bateman <alanb at openjdk.org> wrote:
>> Jan Lahoda has updated the pull request with a new target base due to a merge or a rebase. The incremental webrev excludes the unrelated changes brought in by the merge/rebase. The pull request contains 11 additional commits since the last revision:
>>
>> - Merge branch 'master' into JDK-8340133-2
>> - Using correct pplaceholders.
>> - Adjusting text as suggested.
>> - 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".
>> - Using lowercase for the keys in the help, using 'source-file' program instead of 'single-file' program.
>> - Using an enum instead of booleans, as suggested.
>> - Adjusting the concise help as suggested: 'using main class of a JAR archive' and '<JarFile>.jar'/'<SourceFile>.java'
>> - Adjusting the concise help based on review suggestions.
>> - Cleanup.
>> - Adjusting/improving the concise help.
>> - ... and 1 more: https://git.openjdk.org/jdk/compare/59b0cde0...b4d7b493
>
> src/java.base/share/classes/sun/launcher/resources/launcher.properties line 241:
>
>> 239: \ -jar <jarfile>.jar to execute the main class of a JAR archive\n\
>> 240: \ -m <module>[/<mainclass>] to execute the main class of a module\n\
>> 241: \ <sourcefile>.java to compile and execute a source-file program\n\n\
>
> I'm not sure about the description of <mainclass>. It uses "compiled class", maybe you meant "compiled main class" or something else to connect it "<mainclass>"?
>
> "-jar <jarfile>.jar" may be confusing because the "java -help" uses "-java <jarfile">". I think the usages need to be the same.
@AlanBateman I'd like to respectfully disagree that this was an improvement. If consistency was the important objection here, maybe it would have been better to update "java -help" to include the `.jar`?
In particular, losing the `.java` extension is problematic. I believe that this is essential to the launcher in how it determines if I am trying to launch a class or a source-file program. I just recently tried renaming my `HelloWorld.java` to `HelloWorld.java.old`, but when I ran `java HelloWorld.java.old` I got a warning implying that java thought I was trying to run the class `old` in the package `HelloWorld.java`.
I guess a better solution for the launcher would be to check if the argument given could match an existing text file, even if it looks like a fully qualified class name (but that does not exist). In fact, that might probably be worth a bug report of its own.
But I insist that as long as the current behavior stands, where the trailing `.java` is essential for the launcher to understand that it is launching a source-file program, then the `.java` literal should be a part of the help.
And, for the sake of consistency, that would also imply that the `.jar` suffix should be kept. (I don't know if the launcher would accept like `-jar foo.jar.old`..?)
I still recall how I **struggled** when learning Java that I should do `javac HelloWorld`**`.java`** but not `java HelloWorld`**`.class`**. By explicitly stating `.jar` and `.java` where those are expected, we indirectly underscore the important fact that the class specifications should be made **without** any extension.
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/21411#discussion_r1838130624
More information about the core-libs-dev
mailing list