Releases: remkop/picocli
Picocli 4.7.6
Picocli 4.7.6
The picocli community is pleased to announce picocli 4.7.6.
This release includes bugfixes and enhancements.
Many thanks to the picocli community for raising these issues and providing the pull requests to address them!
This is the eighty-fifth public release.
Picocli follows semantic versioning.
Artifacts in this release are signed by Remko Popma (6601 E5C0 8DCC BB96).
Table of Contents
New and Noteworthy
PropertiesDefaultProvider
now tries to load properties from the classpath if the file cannot be found in the user.home directory.
Fixed issues
- [#2102][#2107] Enhancement:
PropertiesDefaultProvider
should try to load properties from classpath (last). Thanks to Lumír Návrat for the pull request. - [#2202] Enhancement: Change log level from WARN to INFO when bean not found in ApplicationContext. Thanks to Desmond Kirrane for raising this.
- [#2248] Enhancement: Don't show hidden commands in JLine3 command description. Thanks to Reinhard Handler for the pull request.
- [#2170] Enhancement: Use
...
vararg instead of array parameter to match overridden method signature. Thanks to Michael Vorburger for the pull request. - [#2058] Bugfix:
defaultValue
should not be applied in addition to user-specified value for options with a customIParameterConsumer
. Thanks to Staffan Arvidsson McShane for raising this. - [#2148] Bugfix: Fix NPE in jline3
Example.jar
asConfigurationPath
cannot benull
anymore. Thanks to llzen44 for the pull request. - [#2232] Bugfix: fix bug for
Optional<T>
arguments with initial value. Thanks to hq6 for raising this. - [#2149] Bugfix:
@Option
-annotated setter method not invoked with default value when used in mixin for both command and subcommand. Thanks to Zhonghao Wang for raising this. - [#2270] Bugfix: Custom type converter for primitive
boolean
options should not be ignored. Thanks to Sven Kammerer for raising this. - [#2234] BUILD: fix errorprone
TruthSelfEquals
warnings - [#2172] BUILD: Fix broken build. Thanks to Michael Vorburger for the pull request.
- [#2174] BUILD: Fix .gitattributes related CR/LF problems. Thanks to Michael Vorburger for the pull request.
- [#2054][#2176] BUILD: Add Error Prone. Thanks to Michael Vorburger for the pull request.
- [#2053] [#2175] CLEAN: Remove unused extra format arguments. Thanks to Michael Vorburger for the pull request.
- [#2171] DOC: Fix a few typos in CommandLine's JavaDoc. Thanks to Michael Vorburger for the pull request.
- [#2217] DOC: Clarify documentation for negatable options. Thanks to dbear496 for raising this.
- [#2228] DOC: Clarify that
ParseResult
passed toIExecutionExceptionHandler
is the top-level parse result, not the parse result of the subcommand that failed. Thanks to Abel Salgado Romero for raising this. - [#2047] DEP: Bump andymckay/append-gist-action from 1fbfbbce708a39bd45846f0955ed5521f2099c6d to 6e8d64427fe47cbacf4ab6b890411f1d67c07f3e
- [#2091] DEP: Bump actions/checkout from 3.5.2 to 3.6.0
- [#2108] DEP: Bump actions/checkout from 3.6.0 to 4.0.0
- [#2120] DEP: Bump actions/checkout from 4.0.0 to 4.1.0
- [#2225] DEP: Bump actions/checkout from 4.1.0 to 4.1.2
- [#2272] DEP: Bump actions/checkout from 4.1.2 to 4.1.4
- [#2098] DEP: Bump actions/setup-java from 3.11.0 to 3.12.0
- [#2158] DEP: Bump actions/setup-java from 3.12.0 to 4.0.0
- [#2236] DEP: Bump actions/setup-java from 4.0.0 to 4.2.1.
- [#2111] DEP: Bump actions/upload-artifact from 3.1.2 to 3.1.3
- [#2204] DEP: Bump actions/upload-artifact from 3.1.3 to 4.3.1
- [#2273] DEP: Bump actions/upload-artifact from 4.3.1 to 4.3.3
- [#2227] DEP: Bump com.google.errorprone:error_prone_core from 2.23.0 to 2.26.1
- [#2271] DEP: Bump com.google.errorprone:error_prone_core from 2.26.1 to 2.27.1
- [#2237] DEP: Bump emibcn/badge-action from 2.0.2 to 2.0.3.
- [#2099] DEP: Bump gradle/gradle-build-action from 2.4.2 to 2.8.0
- [#2165] DEP: Bump gradle/gradle-build-action from 2.8.0 to 2.11.0
- [#2206] DEP: Bump gradle/gradle-build-action from 2.11.1 to 3.1.0
- [#2246] DEP: Bump gradle/gradle-build-action from 3.1.0 to 3.3.0.
- [#2096] DEP: Bump gradle/wrapper-validation-action from 1.0.6 to 1.1.0
- [#2247] DEP: Bump gradle/wrapper-validation-action from 1.1.0 to 3.3.0.
- [#2263] DEP: Bump gradle/wrapper-validation-action from 3.3.0 to 3.3.2
- [#2085] DEP: Bump github/codeql-action from 2.3.5 to 2.21.4
- [#2114] DEP: Bump github/codeql-action from 2.21.4 to 2.21.7
- [#2167] DEP: Bump github/codeql-action from 2.21.7 to 3.22.11
- [#2230] DEP: Bump github/codeql-action from 3.22.11 to 3.24.8
- [#2235] DEP: Bump github/codeql-action from 3.24.8 to 3.24.10.
- [#2262] DEP: Bump github/codeql-action from 3.24.10 to 3.25.3
- [#2093] DEP: Bump junit5Version from 5.9.3 to 5.10.0
- [#2180] DEP: Bump junit5Version from 5.10.0 to 5.10.1
- [#2240] DEP: Bump junit5Version from 5.10.1 to 5.10.2.
- [#2140] DEP: Bump log4j2Version from 2.20.0 to 2.21.1
- [#2178] DEP: Bump log4j2Version from 2.21.1 to 2.22.0
- [#2252] DEP: Bump log4j2Version from 2.22.0 to 2.23.1
- [#2095] DEP: Bump org.apache.ivy:ivy from 2.5.1 to 2.5.2
- [#2094] DEP: Bump org.asciidoctor:asciidoctorj-pdf from 2.3.7 to 2.3.9
- [#2229] DEP: Bump org.asciidoctor:asciidoctorj-pdf from 2.3.9 to 2.3.15
- [#2244] DEP: Bump org.asciidoctor:asciidoctor-gradle-jvm from 3.3.2 to 4.0.2.
- [#2135] DEP: Bump org.fusesource.jansi:jansi from 2.4.0 to 2.4.1
- [#2089] DEP: Bump org.jetbrains.kotlin:kotlin-gradle-plugin from 1.8.21 to 1.9.10
- [#2154] DEP: Bump org.jetbrains.kotlin:kotlin-gradle-plugin from 1.9.10 to 1.9.21
- [#2090] DEP: Bump org.jetbrains.kotlin:kotlin-script-runtime from 1.8.21 to 1.9.10
- [#2221] DEP: Bump org.jetbrains.kotlin:kotlin-script-runtime from 1.9.10 to 1.9.23
- [#2243] DEP: Bump org.jetbrains.kotlin:kotlin-gradle-plugin from 1.9.21 to 1.9.23.
- [#2146] DEP: Bump org.jline:jline from 3.23.0 to 3.24.1
- [#2241] DEP: Bump org.jline:jline from 3.24.1 to 3.25.1.
- [#2261] DEP: Bump org.jline:jline from 3.25.1 to 3.26.1
- [#2049] DEP: Bump org.hibernate.validator:hibernate-validator from 8.0.0.Final to 8.0.1.Final
- [#2037] DEP: Bump org.scala-lang:scala-library from 2.13.10 to 2.13.11
- [#2112] DEP: Bump org.scala-lang:scala-library from 2.13.11 to 2.13.12
- [#2242] DEP: Bump org.scala-lang:scala-library from 2.13.12 to 2.13.13.
- [#2267] DEP: Bump org.scala-lang:scala-library from 2.13.13 to 2.13.14
- [#2052] DEP: Bump ossf/scorecard-action from 2.1.3 to 2.2.0
- [#2183] DEP: Bump ossf/scorecard-action from 2.2.0 to 2.3.1
- [#2082] DEP: Bump step-security/harden-runner from 2.4.0 to 2.5.1
- [#2152] DEP: Bump step-security/harden-runner from 2.5.1 to 2.6.1
- [#2268] DEP: Bump step-security/harden-runner from 2.6.1 to 2.7.1
- DEP: Bump SpringBoot from 2.7.1 to 2.7.2 (for Java versions prior to 17)
- [#2255] DEP: Bump andymckay/append-gist-action from 0.2 to 0.3
Deprecations
No features were deprecated in this release.
Potential breaking changes
This release has no breaking changes.
Picocli 4.7.5
Picocli 4.7.5
The picocli community is pleased to announce picocli 4.7.5.
This release includes bugfixes and enhancements.
Many thanks to the picocli community for raising these issues and providing the pull requests to address them!
This is the eighty-forth public release.
Picocli follows semantic versioning.
Artifacts in this release are signed by Remko Popma (6601 E5C0 8DCC BB96).
Table of Contents
New and Noteworthy
Fixed issues
- [#2083][#2084] Enhancement: Java 22 update: improve logic for detecting if the output stream is connected to a terminal. Thanks to Liam Miller-Cushon for the pull request.
- [#2087] Enhancement: Mask parameters in trace log when
echo=false
forinteractive
options and positional parameters. Thanks to szzsolt for raising this. - [#2060] Bugfix: Fix positional parameters bug with late-resolved arity variable. Thanks to daisukeoto for raising this.
- [#2074][#2075] Bugfix: Don't generate auto-complete for hidden attributes in
picocli.shell.jline3.PicoCommand
. Thanks to clebertsuconic for the pull request. - [#2059] Bugfix: ArgGroup with
exclusive=false
andmultiplicity=1
should require at least one option; fix regression and refine solution introduced in [#1848][#2030]. Thanks to Utkarsh Mittal for raising this. - [#2080] DOC: Improve GraalVM documentation: add
graalvm-native-image-plugin
. Thanks to Bhavik Patel for the pull request. - [#2045] DOC: Commit html files with LF line-endings. Thanks to Fridrich Strba for the pull request.
Deprecations
No features were deprecated in this release.
Potential breaking changes
This release has no breaking changes.
Picocli 4.7.4
Picocli 4.7.4
The picocli community is pleased to announce picocli 4.7.4.
This release includes bugfixes and enhancements.
Many thanks to the picocli community for raising these issues and providing the pull requests to address them!
This is the eighty-third public release.
Picocli follows semantic versioning.
Artifacts in this release are signed by Remko Popma (6601 E5C0 8DCC BB96).
Table of Contents
New and Noteworthy
See fixed items below.
I cheated on the semantic versioning in this release: a public setter method was added in a class in the picocli.shell.jline3
module. In spite of that, the version number went from 4.7.3 to 4.7.4 (not 4.8.0). My apologies.
Fixed issues
- [#2028][#2031] API: Add setter for name in
picocli.shell.jline3.PicocliCommands
. Thanks to Irina Leontyuk for raising this. - [#2026][#2027] Enhancement: Improved feedback on mistyped subcommands. Thanks to David Pond for the pull request.
- [#2029][#2034] Enhancement: prevent
java.nio.charset.UnsupportedCharsetException: cp0
on windows, and fall back to the default charset if the charset provided by System propertysun.stdout.encoding
is invalid. Thanks to
Bartosz Spyrko-Smietanko for the pull request. - [#2035][#2036] Bugfix: Option "mapFallbackValue" ignored when inherited to subcommand. Thanks to Dan Ziemba for the pull request.
- [#1848][#2030] Bugfix: fix issue with required options in
ArgGroup
becoming optional when combined withDefaultValueProvider
. Thanks to Ruud Senden and Mike Snowden for the pull request. - [#2020] DEP: Bump step-security/harden-runner from 2.3.0 to 2.4.0
- [#2033] DEP: Bump github/codeql-action from 2.2.12 to 2.3.5
- [#2015] DEP: Bump junit5Version from 5.9.2 to 5.9.3
- [#2014] DEP: Bump org.jetbrains.kotlin:kotlin-gradle-plugin from 1.8.20 to 1.8.21
- [#2013] DEP: Bump org.jetbrains.kotlin:kotlin-script-runtime from 1.8.20 to 1.8.21
- [#2008] DEP: Bump springBootVersion from 2.7.10 to 2.7.11
- [#2007] DEP: Bump org.asciidoctor:asciidoctorj-pdf from 2.3.6 to 2.3.7
Deprecations
No features were deprecated in this release.
Potential breaking changes
This release has no breaking changes.
Picocli 4.7.3
Picocli 4.7.3
The picocli community is pleased to announce picocli 4.7.3.
This release includes bugfixes and enhancements.
This is the eighty-second public release.
Picocli follows semantic versioning.
Artifacts in this release are signed by Remko Popma (6601 E5C0 8DCC BB96).
Table of Contents
New and Noteworthy
Fixed a regression introduced in picocli 4.7.2.
Multi-value options whose fallbackValue
is set to CommandLine.Option.NULL_VALUE
, may see a NullPointerException
if the option is specified on the command line without a parameter but with a =
attached, like --option=
.
Also, this release fixes broken links in the Javadoc.
Known issues
NOTE: A minor issue with this release is that the version string in the info.picocli.CommandLine.VERSION
field is incorrectly set to 4.7.3-SNAPSHOT
(should have been 4.7.3
).
Fixed issues
- [#1998] Bugfix: ParameterException: NullPointerException: null while processing argument at or before arg[0]. Thanks to Jiri Daněk for raising this.
- [#1957] DOC: Fixed broken links in the javadoc. Thanks to Andreas Deininger for raising this.
- [#2002] DEP: Bump actions/checkout from 3.5.0 to 3.5.2
- [#2005] DEP: Bump gradle/gradle-build-action from 2.4.0 to 2.4.2
- [#2003] DEP: Bump github/codeql-action from 2.2.11 to 2.2.12
- [#1997] DEP: Bump org.asciidoctor:asciidoctorj-pdf from 2.3.4 to 2.3.6
Deprecations
No features were deprecated in this release.
Potential breaking changes
This release has no breaking changes.
Picocli 4.7.2
Picocli 4.7.2
The picocli community is pleased to announce picocli 4.7.2.
This release includes bugfixes and enhancements.
This is the eighty-first public release.
Picocli follows semantic versioning.
Artifacts in this release are signed by Remko Popma (6601 E5C0 8DCC BB96).
Table of Contents
New and Noteworthy
- Bugfix:
fallbackValue=Option.NULL_VALUE
did not work forCollection
or array options. - Fixed
isJansiConsoleInstalled
performance issue. - Kotlin enhancement: improved
paramLabel
string auto-generated from Kotlininternal
methods which have mangled names with embedded "$". - Various documentation fixes.
Fixed issues
- [#1959] API: Add ability to enable loading resource bundles in annotation processor for tests.
- [#1993] Bugfix:
fallbackValue=Option.NULL_VALUE
did not work forCollection
or array options. Thanks to Jiri Daněk for raising this. - [#1975][#1976] Enhancement: Fixed
isJansiConsoleInstalled
performance issue. Thanks to ChrisTrenkamp for the pull request. - [#1932] Enhancement: Move System-Rules tests to Java 5 test module; move System-Lambda tests to Java 8+ test module. Facilitate testing with recent JRE's.
- [#1984] Enhancement (Kotlin): improve
paramLabel
string auto-generated from Kotlininternal
methods which have mangled names with embedded "$". Thanks to Ken Yee for raising this. - [#1945] DOC: Code sample: add Java version. Thanks to Andreas Deininger for the pull request.
- [#1956] Doc: Fix broken link in user manual. Thanks to Andreas Deininger for the pull request.
- [#1955] DEP: Bump asciidoctorj from 2.5.5 to 2.5.7. Thanks to Andreas Deininger for the pull request.
- [#1980] DEP: Bump actions/checkout from 3.3.0 to 3.5.0
- [#1952] DEP: Bump actions/setup-java from 3.9.0 to 3.10.0
- [#1985] DEP: Bump actions/setup-java from 3.10.0 to 3.11.0
- [#1941] DEP: Bump emibcn/badge-action from 1.2.4 to 2.0.2
- [#1942] DEP: Bump github/codeql-action from 2.1.39 to 2.2.1
- [#1953] DEP: Bump github/codeql-action from 2.2.1 to 2.2.3
- [#1958] DEP: Bump github/codeql-action from 2.2.3 to 2.2.4
- [#1979] DEP: Bump github/codeql-action from 2.2.4 to 2.2.8
- [#1995] DEP: Bump github/codeql-action from 2.2.8 to 2.2.11
- [#1961] DEP: Bump gradle/gradle-build-action from 2.3.3 to 2.4.0
- [#1960] DEP: Bump gradle/wrapper-validation-action from 1.0.5 to 1.0.6
- [#1962] DEP: Bump log4j2Version from 2.19.0 to 2.20.0
- [#1947] DEP: Bump org.jetbrains.kotlin:kotlin-gradle-plugin from 1.7.20 to 1.8.10
- [#1989] DEP: Bump org.jetbrains.kotlin:kotlin-gradle-plugin from 1.8.10 to 1.8.20
- [#1948] DEP: Bump org.jetbrains.kotlin:kotlin-script-runtime from 1.7.20 to 1.8.10
- [#1988] DEP: Bump org.jetbrains.kotlin:kotlin-script-runtime from 1.8.10 to 1.8.20
- [#1968] DEP: Bump org.jline:jline from 3.22.0 to 3.23.0
- [#1990] DEP: Bump ossf/scorecard-action from 2.1.2 to 2.1.3
- [#1964] DEP: Bump springBootVersion from 2.7.8 to 2.7.9
- [#1978] DEP: Bump springBootVersion from 2.7.9 to 2.7.10
- [#1963] DEP: Bump step-security/harden-runner from 2.1.0 to 2.2.0
- [#1970] DEP: Bump step-security/harden-runner from 2.2.0 to 2.2.1
- [#1992] DEP: Bump step-security/harden-runner from 2.2.1 to 2.3.0
Deprecations
No features were deprecated in this release.
Potential breaking changes
This release has no breaking changes.
Picocli 4.7.1
Picocli 4.7.1
The picocli community is pleased to announce picocli 4.7.1.
This release includes bugfixes and enhancements.
This is the eightieth public release.
Picocli follows semantic versioning.
Artifacts in this release are signed by Remko Popma (6601 E5C0 8DCC BB96).
Table of Contents
New and Noteworthy
Fixed issues
- [#1874][#1885][#1933] Bugfix: The
picocli-groovy
module should not declareorg.codehaus.groovy:groovy-all
as dependency. Thanks to Mattias Andersson and Michael Kutz for raising this, and to Paul King for the analysis. - [#1886][#1896] Bugfix: AsciiDoc generator now correctly outputs options even if all options are in ArgGroups. Thanks to Ruud Senden for the discussion and the pull request.
- [#1878][#1876] Bugfix: Annotation processor now avoids loading resource bundles at compile time. Thanks to Ruud Senden for the discussion and the pull request.
- [#1911] Avoid using boxed boolean in
CommandLine.Interpreter.applyValueToSingleValuedField
. Thanks to Jiehong for the pull request. - [#1870] Bugfix:
StringIndexOutOfBoundsException
in usage help when command has many (and long) aliases. Thanks to Martin for raising this. - [#1904] Bugfix: Apply
fallbackValue
to vararg multi-value options, not just single-value options. Thanks to Andreas Sewe for raising this. - [#1930] Bugfix: Ensure tests pass in environments for Java 5-18.
- [#1940] Bugfix: fix 3 failing tests in
ManPageGeneratorTest
. Thanks to Mike Snowden for the pull request. - [#1881] DOC: Many documentation improvements. Thanks to Andreas Deininger for the pull request.
- [#1855][#1857] DOC: Add new user manual section called Rare Use Cases detailing
System.exit
usage. Thanks to Tadaya Tsuyukubo for the pull request. - [#1880] DOC: Improve documentation for negatable options that are true by default. Thanks to Sebastian Hoß for raising this.
- [#1815] DOC: Improve user manual section for non-validating ArgGroups. Thanks for Paul Harris for raising this.
- [#1908] DOC: Update the user manual GraalVM section to use the new official native-maven-plugin. Thanks to tison for the pull request.
- [#1924] DOC: Update
picocli-codegen/README.adoc
. Thanks to Seyyed Emad Razavi for the pull request. - [#1910][#1917] DOC: Fix broken link to Zero Bug Commitment. Thanks to Jiehong for raising this and thanks to Andreas Deininger for the pull request.
- [#1915] DOC: Improve default provider examples. Thanks to David for raising this.
- [#1918][#1920] DOC: Removed unused Travis CI badge and associated broken link from README. Thanks to Andreas Deininger for raising this and the pull request.
- [#706] DOC: Add GitHub badge with test count to README.
- [#1939] BUILD: Fix
picocli-annotation-processing-tests
failures on Java 16+: rewrite tests to avoid Googlecompiler-test
API that internally usescom.sun.tools.javac.util.Context
. - [#1887] DEP: Bump biz.aQute.bnd.gradle from 6.3.1 to 6.4.0
- [#1865] DEP: Bump ivy from 2.5.0 to 2.5.1
- [#1931] DEP: Bump springBootVersion from 2.7.5 to 3.0.2
- [#1929] DEP: Bump github/codeql-action from 2.1.29 to 2.1.39
- [#1926] DEP: Bump step-security/harden-runner from 1.5.0 to 2.1.0
- [#1914] DEP: Bump actions/checkout from 3.1.0 to 3.3.0
- [#1897] DEP: Bump actions/setup-java from 3.6.0 to 3.9.0
- [#1902] DEP: Bump ossf/scorecard-action from 2.0.6 to 2.1.2
- [#1938] DEP: Bump actions/upload-artifact from 3.1.1 to 3.1.2
- [#1937] DEP: Bump asciidoctorj-pdf from 2.3.3 to 2.3.4
- [#1936] DEP: Bump jline from 3.21.0 to 3.22.0
- [#1935] DEP: Bump compile-testing from 0.19 to 0.21.0
Deprecations
No features were deprecated in this release.
Potential breaking changes
This release has no breaking changes.
Picocli 4.7.0
Picocli 4.7.0
The picocli community is pleased to announce picocli 4.7.0.
This release includes bugfixes and enhancements.
A potentially breaking change is that the parser now treats char[]
as a single-value type.
From this release, applications can programmatically set the trace level, and use tracing in custom components.
Applications can improve startup time by setting system property picocli.disable.closures
to true
to disable support for closures in annotations.
Many more fixes and enhancements, see the sections below for more details.
This is the seventy-ninth public release.
Picocli follows semantic versioning.
Artifacts in this release are signed by Remko Popma (6601 E5C0 8DCC BB96).
Table of Contents
New and Noteworthy
Tracing API
From picocli 4.7.0, applications can programmatically set the trace level, and use tracing in custom components.
In addition to setting system property picocli.trace
, applications can now change the trace level via the Tracer::setLevel
method. For example:
CommandLine.tracer().setLevel(CommandLine.TraceLevel.INFO);
The new public method CommandLine.tracer()
returns the singleton Tracer
object that is used internally by picocli, and can also be used by custom component implementations to do tracing. For example:
class MyIntConverter implements ITypeConverter<Integer> {
public Integer convert(String value) {
try {
return Integer.parseInt(value);
} catch (NumberFormatException ex) {
CommandLine.tracer().info(
"Could not convert %s to Integer, returning default value -1", value);
return -1;
}
}
}
Enable Consuming Option Names or Subcommands
By default, options that take a parameter do not consume values that match a subcommand name or an option name.
This release introduces two parser configuration options to change this behaviour:
CommandLine::setAllowOptionsAsOptionParameters
allows options to consume option namesCommandLine::setAllowSubcommandsAsOptionParameters
allows options to consume subcommand names
When set to true
, all options in the command (options that take a parameter) can consume values that match option names or subcommand names.
This means that any option will consume the maximum number of arguments possible for its arity.
USE WITH CAUTION!
If an option is defined as arity = "*"
, this option will consume all remaining command line arguments following this option (until the End-of-options delimiter) as parameters of this option.
Unsorted Synopsis
By default, the synopsis displays options in alphabetical order.
Picocli 4.7.0 introduces a sortSynopsis = false
attribute to let the synopsis display options in the order they are declared in your class, or sorted by their order
attribute.
@Command(sortSynopsis = false)
Parser change for char[]
options
Prior to 4.7, the picocli parser treated options and positional parameters with type char[]
as array (multi-value) options, except for interactive options. However, it is more intuitive to treat all char[]
options as single-value options, similar to String
options.
For end users, this means that existing applications that use non-interactive char[]
options will no longer allow multiple characters to be specified separately on the command line. That is, input like -c A -c B -c C
will be rejected and the user needs to specify -c ABC
instead.
Applications that want to preserve the previous behaviour will need to change their code to use java.lang.Character[]
instead of char[]
.
Fixed issues
- [#1599] API: The
picocli-codegen
artifact is now an explicitly declared named JPMS module with amodule-info.class
. - [#1611] API: The
picocli-groovy
artifact is now an explicitly declared named JPMS module with amodule-info.class
. - [#1610] API: The
picocli-shell-jline2
is now an explicitly declared named JPMS module with amodule-info.class
. - [#1609] API: The
picocli-shell-jline3
is now an explicitly declared named JPMS module with amodule-info.class
. - [#1608] API: The
picocli-spring-boot-starter
is now an explicitly declared named JPMS module with amodule-info.class
. NOTE: its module name changed toinfo.picocli.spring.boot
frominfo.picocli.spring
. - [#1614] API: Change
picocli-spring-boot-starter
JPMS module name toinfo.picocli.spring.boot
frominfo.picocli.spring
. - [#1600] API: Add
requires static java.sql
to picoclimodule-info
. - [#1471] API: Provide a programmatic way to configure Picocli's
TraceLevel
. Thanks to ekinano for raising this. - [#1125] API: Add parser configuration to allow options to consume values that match subcommand names or option names.
- [#1396][#1401] API: Support generic types in containers (e.g. List, Map). Thanks to Michał Górniewski for the pull request.
- [#1380][#1505] API, bugfix:
requiredOptionMarker
should not be displayed onArgGroup
options. Thanks to Ahmed El Khalifa for the pull request. - [#1563] API: Add constructor to
PicocliSpringFactory
to allow custom fallbackIFactory
. Thanks to Andrew Holland for raising this. - [#1767][#1802] API: avoid NPE on
OptionSpec.getValue()
and addIScoped
internal API. Thanks to Ruud Senden for the discussion and the pull request. - [#1574] API: Add annotation API to control whether synopsis should be sorted alphabetically or by explicit
order
. - [#1708][#1712][#1723] API: The
setUsageHelpLongOptionsMaxWidth
method no longer throws an exception when an invalid value is specified; instead, the value is ignored and an INFO-level trace message is logged. Thanks to Fabio for the pull request. - [#648][#1846] Enhancement: Treat
char[]
as single-value types (Potentially breaking change). Thanks to Lukáš Petrovický for the pull request with the test to verify the solution. - [#1571] Enhancement: Variables in values from the default value provider should be interpolated. Thanks to Bas Passon for raising this.
- [#1773] Enhancement: Applications can improve startup time by setting system property
picocli.disable.closures
totrue
to disable support for closures in annotations. Thanks to patric-r for raising this. - [#1408] Enhancement: Synopsis should respect
order
if specified. Thanks to Simon for raising this. - [#964][#1080] Enhancement: ArgGroup synopsis should respect
order
(if specified). Thanks to Enderaoe for the pull request with unit tests. - [#1706][#1710] Enhancement: Subcommands should get missing messages from parent command resource bundle. Thanks to Ruud Senden and Mike Snowden for the pull request.
- [#899][#1578][#1579] Enhancement: improve built-in
Help
command description. Thanks to Michael L Heuer for the pull request. Thanks to Garret Wilson for raising this. - [#1713][#1714] Enhancement: Support optional booleans in annotation processor. Thanks to Jan Waś for the pull request.
- [#1387][#1711] Enhancement: Annotation processor should validate final primitive and String fields with
Option
andParameters
annotations. Thanks to xehpuk for raising this, and thanks to Adam McElwee for the pull request. - [#1572] Enhancement: Remove redundant braces in ArgGroup synopsis.
- [#1602] Enhancement: Fix incorrect debug output for add/removeAlias.
- [#1603] Enhancement: Improve debug tracing information for help requests and command execution.
- [#1629] Enhancement: Omit empty braces in standard prompt for interactive options without description. Thanks to Andreas Deininger for raising this.
- [#1778] Enhancement: Add support for new Spring Boot auto configuration introduced in Spring Boot 2.7. Thanks to Andreas Asplund for the pull request.
- [#1836][#1841] Enhancement: Command aliases on Mixin were not being applied. Thanks to Mike Snowden for the pull request and to Ruud Senden for raising this.
- [#1754][#1759] Enhancement: Autocompletion now correctly handles completion candidates with spaces. Thanks to Juan Martín Sotuyo Dodero for the pull request.
- [#1834][#1838] Bugfix: Incorrect synopsis for char[] options. Thanks to Ruud Senden and Mike Snowden for the pull request.
- [#1680] Bugfix: ArgGroups with
multiplicity="0"
are now disallowed at construction time and no longer throw aStackOverflowError
while parsing. Thanks to ARNOLD Somogyi for raising this. - [#1615][#1616] Bugfix:
getCJKAdjustedLength()
no longer miscalculates for supplementary code points. Thanks to gwalbran for the pull request. - [#1575] Bugfix: Synopsis should not cluster boolean options if `po...
Picocli 4.6.3
Picocli 4.6.3
The picocli community is pleased to announce picocli 4.6.3.
This release includes bugfixes and enhancements, as well as documentation and security improvements.
Several improvements to the annotation processor and the generated autocompletion scripts.
Much gratitude to the picocli community for the many pull requests and other contributions!
This is the seventy-eighth public release.
Picocli follows semantic versioning.
Artifacts in this release are signed by Remko Popma (6601 E5C0 8DCC BB96).
Table of Contents
New and Noteworthy
Default branch renamed to main
The default branch has been renamed! master
is now named main
.
If you have a local clone, you can update it by running the following commands:
git branch -m master main
git fetch origin
git branch -u origin/main main
git remote set-head origin -a
Autocompletion script improvements
- Autocompletion now shows subcommand aliases in the completion candidates
- Autocompletion now displays completion candidates on exact match
- Autocompletion now supports file names containing spaces
- Remove file name extension and local dir prefix from the command name in generated autocomplete scripts
- Fix Bash error
compopt: command not found
on older versions of Bash - Autocompletion on ZSH should only call
compinit
once
Fixed issues
- [#1440] Bugfix: annotation processor incorrectly failed with
DuplicateOptionAnnotationsException
when multiple commands had a subcommand in common and an inherited (scope = ScopeType.INHERIT
) option. Thanks to nemetsSY for raising this. - [#1472] Bugfix: annotation processor option
-Averbose=true
no longer incorrectly triggerswarning: The following options were not recognized by any processor: '[verbose]'
. Thanks to Lorenz Leutgeb for raising this. - [#1384][#1493] Bugfix: parser now correctly handles ArgGroups with optional positional parameters. Thanks to Matthew Lewis for raising this and to Kurt Kaiser for the pull request.
- [#1474] Bugfix: Avoid
UnsupportedCharsetException: cp65001
on Microsoft Windows console when code page is set to UTF-8. Thanks to epuni for raising this. - [#1528][#1529] Bugfix: Allow aliases of a CommandSpec that is already a subcommand to be properly & consistently modified. Thanks to Ross Goldberg for the pull request.
- [#1466][#1467] Bugfix/Enhancement: Autocomplete now shows subcommand aliases in the completion candidates. Thanks to Ruud Senden for the pull request.
- [#1468] Bugfix/Enhancement: Autocompletion now displays completion candidates on exact match. Thanks to Ruud Senden for raising this.
- [#1537][#1541] Bugfix: AbbreviationMatcher now treats aliases of the same object as one match. Thanks to Staffan Arvidsson McShane for raising this and NewbieOrange for the pull request.
- [#1531] Bugfix: Options defined as annotated methods should reset between
parseArgs
invocations whenCommandLine
instance is reused. Thanks to kaushalkumar for raising this. - [#1458][#1473] Enhancement: Autocompletion now supports file names containing spaces. Thanks to zpater345 for raising this and thanks to NewbieOrange for the pull request.
- [#1477] Enhancement: Remove file name extension and local dir prefix from the command name in generated autocomplete scripts. Thanks to Andrea Peruffo for the pull request.
- [#1464] Enhancement: Fix Bash error
compopt: command not found
on older versions Bash. Thanks to Andres Almiray for raising this. - [#1476] Enhancement: improve error message in
AbstractCommandSpecProcessor#extractTypedMember
. Thanks to Ross Goldberg for raising this. - [#1475] Enhancement: Fix typo in annotation target-type error message. Thanks to Ross Goldberg for the pull request.
- [#1366][#1370] Enhancement: show in usage help that the built-in
help
command only works on the first argument. Thanks to Patrice Duroux for the pull request. - [#1492] Enhancement: Use EditorConfig to define file formats and coding style; Thanks to Goooler for the pull request.
- [#1530] Enhancement: Simplified
CommandSpec#validateSubcommandName
implementation. Thanks to Ross Goldberg for the pull request. - [#1484] Enhancement: Fixed
org.junit.Assert.assertThat
deprecation warning; Thanks to Ross Goldberg for the pull request. - [#1485] Enhancement: Fix build warnings; build doc enhancements; Thanks to Ross Goldberg for the pull request.
- [#1483] Enhancement: Improved
AbstractCommandSpecProcessor#isSubcommand
; Thanks to Ross Goldberg for the pull request. - [#1499] Enhancement: Improved
DefaultFactory#create(Class<T>)
. Thanks to Ross Goldberg for the pull request. - [#1518] Enhancement: Simplified detection of getter & setter in
TypedMember
constructor. Thanks to Ross Goldberg for the pull request. - [#1568] Enhancement: CommandLine cleanup. Thanks to Ross Goldberg for the pull request.
- [#1526][#1548] Enhancement: Autocompletion on ZSH should only call
compinit
once. Thanks to Ben Herweyer for the pull request. - [#1539] DOC: Various documentation improvements. Thanks to Hamid Nazari for the pull request.
- [#1481] DOC: Removed repeated "whether" typo in JavaDoc; Thanks to Ross Goldberg for the pull request.
- [#1125][#1538] DOC: Update "Option Names or Subcommands as Option Values" section in user manual; Thanks to Scott Turner for raising this.
- [#1409][#1463] DOC: add documentation section on using default values in argument groups. Thanks to Ben Kedo for the pull request.
- [#1383][#1502] DOC: add tests demonstrating usage of multiple arguments. Thanks to Ben Kedo and lind6 for the pull request.
- [#1462] DOC, BUILD, DEP: Extend documentation on argument files, fix broken/outdated links, update dependencies. Thanks to Andreas Deininger for the pull request.
- [#1457] DOC: add caution about arguments in @files with quoted option parameters. Thanks to Andreas Deininger for the pull request.
- [#1544][#1545] DOC: Add NOTICE file with GPL v2 + CPE license. Thanks to Keith M Swartz for the pull request.
- [#1553] SECURITY: Fix code scanning alert - Token-Permissions
- [#1554] SECURITY: Fix code scanning alert - Pinned-Dependencies
- [#1555] SECURITY: Fix code scanning alert - Create SECURITY.md
- [#1556][#1557] SECURITY: Fix code scanning alert - SAST
- [#1558] SECURITY: Fix code scanning alert - Pinned-Dependencies in codeql-analysis.yml
- [#1559] SECURITY: Fix code scanning alert - Token-Permissions in codeql-analysis.yml
- [#1560] SECURITY: Fix code scanning alert - Binary-Artifacts - Validate Gradle Wrapper
- [#1561] SECURITY: Fix code scanning alert - Doc/example code uses a broken or risky cryptographic algorithm
- [#1562] BUILD: Rename 'master' branch to 'main'
- [#1491] BUILD: Add build job in CI; Thanks to Goooler for the pull request.
- [#1482] BUILD: Optimize gradle; Thanks to Goooler for the pull request.
- [#1461] BUILD: Allow publishing without signing for non-release versions. Thanks to Andreas Deininger for raising this.
- [#1459] BUILD: The nexus-staging Gradle plugin must be applied to the root project, not to subprojects. Thanks to Andreas Deininger for raising this.
- [#1503] BUILD: Fix failing
System.exit
tests on Java 18. - [#1504] BUILD: Run tests on Java 6-7 in CI environment, semi-automate testing on Java 5.
- [#1516] DEP: Remove redundant dependency on
jline-console
inpicocli-shell-jline3
. Thanks to kaushalkumar for raising this. - [#1495] DEP: Bump validation-api from 2.0.0.Final to 2.0.1.Final
- [#1496] DEP: Bump biz.aQute.bnd.gradle from 5.1.2 to 6.1.0
- [#1494] DEP: Bump kotlin-gradle-plugin from 1.5.31 to 1.6.0
- [#1497] DEP: Bump badass-jar from 1.1.3 to 1.2.0
- [#1498] DEP: Bump hibernate-validator from 6.1.2.Final to 7.0.1.Final
- [#1490] DEP: Bump hibernate-validator-annotation-processor from 6.1.2.Final to 7.0.1.Final
- [#1489] DEP: Bump log4j-core from 2.13.0 to 2.14.1
- [#1488] DEP: Bump log4j-api from 2.13.0 to 2.14.1
- [#1487] DEP: Bump kotlin-script-runtime from 1.5.31 to 1.6.0
- [#1486] DEP: Bump gradle-nexus-staging-plugin from 0.21.0 to 0.30.0
- [#1500][#1517] DEP: Bump gradle from 7.3 to 7.3.3. Thanks to Ross Goldberg for the pull request.
- [#1569] DEP: Bump gradle from 7.3.3 to 7.4. Thanks to Ross Goldberg for the pull request.
- [#1515] DEP: Bump kotlin-gradl...
Picocli 4.6.2
Picocli 4.6.2
The picocli community is pleased to announce picocli 4.6.2.
This release includes bugfixes and enhancements. Many improvements in the documentation.
Thanks to the many people in the picocli community for raising issues and contributing pull requests to fix issues!
From this release, picocli uses system properties sun.stdout.encoding
and sun.stderr.encoding
when creating the PrintWriters
returned by CommandLine::getOut
and CommandLine::getErr
. When these system properties do not exist, picocli falls back to the default charset (determined by file.encoding
). This addresses an issue on Windows, where the default charset is not the same as the encoding for its console (often the older cp437
codepage on English-language versions of Windows).
Note that these system properties seem to have been introduced in Java 8 (although I cannot find it in the JDK 8 release notes) and may not exist on earlier JVMs or on JVMs other than the Oracle and OpenJDK implementations.
This is the seventy-seventh public release.
Picocli follows semantic versioning.
Artifacts in this release are signed by Remko Popma (6601 E5C0 8DCC BB96).
Table of Contents
New and Noteworthy
Fixed issues
- [#1422] API: Un-deprecate the
@Option
help
attribute; it is useful for custom help options. Thanks to kaushalkumar for raising this. - [#1337][#1338] Enhancement: prevent spurious
WARNING: tag not found in include file
messages when generating man pages. Thanks to Philip Crotwell for the pull request. - [#1340] Enhancement: add xref to generated man page document to link to subcommands from the parent command page. Thanks to Philip Crotwell for the pull request.
- [#1351][#1362] Enhancement: avoid calling option
completionCandidates
when displaying usage help if${COMPLETION-CANDIDATES}
is not specified in description. Thanks to Wenhao ZHANG, sustc11810424 and Yining Tang for the pull request. - [#1303] Bugfix: Prevent
IllegalArgumentException: argument type mismatch
error in method subcommands with inherited mixed-in standard help options. Thanks to Andreas Deininger for raising this. - [#1300] Bugfix: Avoid spurious warning "Could not set initial value for field boolean" when reusing
CommandLine
with ArgGroup. Thanks to Yashodhan Ghadge for raising this. - [#1316] Bugfix: Avoid
DuplicateOptionAnnotationsException
thrown onmixinStandardHelpOptions
for subcommands when parent hasscope = INHERIT
bypicocli-codegen
annotation processor. Thanks to Philippe Charles for raising this. - [#1319] Bugfix: Avoid
DuplicateOptionAnnotationsException
when parent has inherited mixed-in help options and the built-inHelpCommand
subcommand. Thanks to Andreas Deininger for raising this. - [#1331] Bugfix: Avoid
IllegalArgumentException
when parent has no standard help options andscope = INHERIT
, while subcommand does have mixed-in standard help options. Thanks to Andreas Deininger for raising this. - [#1381][#1382] Bugfix: Default value of option in repeated subcommand was not applied correctly. Thanks to sfeuerhahn for the pull request.
- [#1434][#1435]
CommandSpec.remove(arg)
should also remove the arg from theargs
collection in the CommandSpec. Thanks to kaushalkumar for the pull request. - [#1404] Bugfix/Enhancement: Print paramLabel only when it could exist. Thanks to João Guerra for the pull reqeust.
- [#1320][#1321] Bugfix/Enhancement: Use system properties
sun.stdout.encoding
andsun.stderr.encoding
when creating thePrintWriters
returned byCommandLine::getOut
andCommandLine::getErr
. Thanks to Philippe Charles for the investigation and the pull request. - [#1431] Bugfix/enhancement:
.gitattributes
should include HTML files to convert CRLF to LF. Thanks to wenhoujx for pointing this out. - [#1388][#1430] Bugfix: Fix subcommand aliases autocomplete regression. Thanks to NewbieOrange for the pull request.
- [#1415] Bugfix/DOC: fix NullPointerException in README Example. Thanks to shannonbay for raising this.
- [#1421] Bugfix/DOC:
execute
method inRunAll
,RunFirst
andRunLast
should not be deprecated. Thanks to Gamal DeWeever for raising this. - [#1326][#1339] DOC: Added documentation and examples for controlling the locale. Thanks to Andreas Deininger for the pull request.
- [#1296] DOC: add Kotlin code samples to user manual; other user manual improvements. Thanks to Andreas Deininger for the pull request.
- [#1299] DOC: Link to
IParameterPreprocessor
fromIParameterConsumer
javadoc. Thanks to Andreas Deininger for the pull request. - [#1304] DOC: Manual, chapter '17.9 Inherited Command Attributes': added Kotlin version of code sample. Thanks to Andreas Deininger for the pull request.
- [#1305] DOC: Document use of
IParameterConsumer
as n-ary type converter. Thanks to Martin for raising this. - [#1307] DOC: Added CAUTION admonitions, Kotlin code sample. Thanks to Andreas Deininger for the pull request.
- [#1308] DOC: Add example for Option
converter
, improve text for default values. Thanks to Abhijit Sarkar for raising this. - [#1314] DOC: Fix use of deprecated Maven properties in README. Thanks to Philippe Charles for the pull request.
- [#1323] DOC: Update Testing section of the user manual for Stefan Birkner's library System-Lambda.
- [#1325] DOC: Add section on Short and Long Option Columns to user manual. Thanks to Andrei Ciobanu for raising this.
- [#1336] DOC: Kotlin sample code, documentation improvements. Thanks to Andreas Deininger for the pull request.
- [#1342] DOC: Improve user manual chapter 28.3 'Testing the Exit Code'. Thanks to Andreas Deininger for the pull request.
- [#1344] DOC: Documentation, chapter 'Testing environment variables:': add Kotlin test sample. Thanks to Andreas Deininger for the pull request.
- [#1443] DOC: Fix incorrect method name
setLongOptionsMaxWidth
tosetUsageHelpLongOptionsMaxWidth
in user manual section 'Long Option Column Width'. Thanks to kunlk for raising this. - [#1360][#1359] DOC: add JReleaser as packaging option. Thanks to Andres Almiray for the pull request.
- [#1363][#1364] DOC: Add caution on Variable interpolation in Kotlin. Thanks to MagnusMG for the pull request.
- [#1397][#1399] DOC: Update Jline2 README.md to add some recommended workaround about ANSI incompatible terminals. Thanks to Simon for the pull request.
- [#1398][#1400] DOC: Arity of boolean options is now documented correctly. Thanks to João Guerra for the pull request.
- [#1428][#1433] DOC: Add section about subcommands with the same name as option default value. Thanks to cbcmg for the pull request.
- [#1390][#1432] DOC: Update examples to not throw Exception from main method. Thanks to wenhoujx for the pull request.
- [#1423] DOC: Fixed broken link in README.md to annotation processor documentation. Thanks to Sevy007 for raising this.
- [#1449] DOC: Fix typo in
picocli-shell-jline2/README.md
. Thanks to Ahmed Ashour for the pull request. - [#1426] Fix README adoption logos. Thanks to NewbieOrange for the pull request.
- [#1313] DEP: Bump jline3Version in order to avoid stackoverflow error. Thanks to Rupert Madden-Abbott for the pull request.
- [#1455] DEP: Bump spring-boot version to 2.5.6.
- [#1369][#1371] Upgrade jline3 to version 3.19.0 to avoid "ReadConsoleInputW failed: Incorrect function" error. Thanks to auricgoldfinger for the pull request.
- [#1336] BUILD: Bump Spring Boot, Gradle and Kotlin to latest version. Thanks to Andreas Deininger for the pull request.
- [#1327] BUILD: fix incorrect version in
MANIFEST.MF
. Thanks to Fiouz for the pull request. - [#1328] BUILD: Upgrade Gradle to 6.8.2 and enable official Gradle Wrapper Validation GitHub Action. Thanks to Fiouz for the pull request.
- [#1329] BUILD: OSGi manifest entry in picocli-4.6.0.jar should not require groovy. Thanks to Fiouz for raising this.
- [#1330] BUILD: use type-safe DSL instead of direct XML manipulation to generate
pom.xml
. Thanks to Fiouz for the pull request. - [#1332] BUILD: Bumping asciidoctor +...
Picocli 4.6.1
Picocli 4.6.1
The picocli community is pleased to announce picocli 4.6.1.
This release fixes a problem (introduced in the 4.6.0 release) with dependency scope in the following sub-modules:
- picocli-codegen
- picocli-groovy
- picocli-shell-jline2
- picocli-shell-jline3
- picocli-spring-boot-starter
The problem was that these modules contained dependencies that were declared to have implementation
scope instead of api
scope.
However, these were transitive dependencies, and necessary to compile any project that uses the above picocli modules.
In this release, transitive dependencies are declared with api
scope in the above modules.
Special thanks to Sualeh Fatehi, Dejan Stojadinović and Semyon Levin for the quick community feedback, pull request and reviews!
This is the seventy-sixth public release.
Picocli follows semantic versioning.
Table of Contents
New and Noteworthy
Fixed issues
- [#1291] Fix dependency scope for
picocli-shell-jline3
. Thanks to Sualeh Fatehi for raising this. - [#1292] PR to fix dependency scope for
picocli-shell-jline3
. Thanks to Dejan Stojadinović for the pull request, and Semyon Levin for the review. - [#1294] Fix dependency scope for
picocli-spring-boot-starter
. Thanks to Semyon Levin for raising this.
Deprecations
No features were deprecated in this release.
Potential breaking changes
This release has no breaking changes.