Picocli is a framework for creating Java command line applications with almost zero code.

The project contains multiple modules, but most applications only need a few of them. The table below shows the JPMS module name and the Maven coordinates for all modules in the project.

Picocli project modules: JPMS module name and their Maven coordinates
JPMS module name | Maven coordinates (without version)
--- | ---
`info.picocli` | `info.picocli:picocli`
`info.picocli.codegen` | `info.picocli:picocli-codegen`
`info.picocli.groovy` | `info.picocli:picocli-groovy`
`info.picocli.shell.jline2` | `info.picocli:picocli-shell-jline2`
`info.picocli.shell.jline3` | `info.picocli:picocli-shell-jline3`
`info.picocli.spring.boot` | `info.picocli:picocli-spring-boot-starter`

Most application will only need the main `picocli` module, but we recommend also configuring the `picocli-codegen` module as an annotation processor for your project. This provides compile-time error checking and generates GraalVM configuration files under `META-INF/native-image/picocli-generated/$project` during compilation, to be included in the application jar. This in turn facilitates converting your command line application to a native image.

The `picocli-groovy` module allows Groovy scripts to use picocli annotations for even more compact code.

The `picocli-shell-jline2` and `picocli-shell-jline3` modules are of interest to applications that want to provide an interactive shell-like console.

The `picocli-spring-boot-starter` module provides Spring integration. Particularly, it allows for `@Autowired` or `@javax.inject`-annotated program elements in picocli components (commands, subcommands, type converters, default providers, etc.) to be injected with values from Spring's Application Context.