RFR: 8316804: Gracefully handle the case where --release is not specified last [v3]
Jaikiran Pai
jpai at openjdk.org
Wed Dec 18 15:39:44 UTC 2024
On Thu, 12 Dec 2024 07:44:50 GMT, Christian Stein <cstein at openjdk.org> wrote:
>> Please review this change for the `jar` tool to gracefully handle the case where `--release` is not specified as the last arguments.
>>
>> Prior to this commit, operation modes `-d --describe-module` and `--validate` expected to read the optional `--release` option as a file argument: `jar -d -f a.jar --release 9`
>> By adding a hidden GNU-style `--release` option, processing the optional arguments before in those two operation modes, the position is now no longer required to trail behind the `-f --file` option: `jar -d --release 9 -f a.jar`
>>
>>
>> ==============================
>> Test summary
>> ==============================
>> TEST TOTAL PASS FAIL ERROR
>> jtreg:test/jdk/tools/jar 26 26 0 0
>> ==============================
>> TEST SUCCESS
>
> Christian Stein has updated the pull request incrementally with one additional commit since the last revision:
>
> Add two more valid use-cases
I had a look at this one today. The `jar --help` documentation states:
Usage: jar [OPTION...] [ [--release VERSION] [-C dir] files] ...
That usage implies that a `--release VERSION` must always be followed by file paths and there cannot be any options (like `-f` or `--file` for example) after a `--release VERSION` has been encountered. The help text further states:
--release VERSION Places all following files in a versioned directory
of the jar (i.e. META-INF/versions/VERSION/)
So it appears that this `--release` option was at least initially envisioned only for determining where in the JAR the files will be placed.
Interestingly, neither the help text nor the `jar` tool specification https://docs.oracle.com/en/java/javase/23/docs/specs/man/jar.html states anywhere that the `--release` option is supported by the `--describe-module` or the `--validate` operations. In fact, the `--validate` operation isn't mentioned in the `jar` tool specification at all. The lack of details for `--describe-module` and `--validate` in the `jar` tool specification will have to be addressed separately.
What's being proposed here is that the `--release` option (followed by the release value) be allowed to be placed like any other `jar` tool option that follow the main operation. But this proposal limits this allowance only to the `--describe-module` and the `--validate` main operations. I think what's being proposed here is reasonable.
@AlanBateman @LanceAndersen do you think this proposal is OK?
As for the implementation specific detail of this change, I'll add some inline comments in the PR.
-------------
PR Comment: https://git.openjdk.org/jdk/pull/22079#issuecomment-2551640171
More information about the core-libs-dev
mailing list