Class ReflectionConfigGenerator
ReflectionConfigGenerator
generates a JSON String with the program elements that will be accessed
reflectively in a picocli-based application, in order to compile this application ahead-of-time into a native
executable with GraalVM.
GraalVM has limited support for Java reflection and it needs to know ahead of time the reflectively accessed program elements.
The output of ReflectionConfigGenerator
is intended to be passed to the -H:ReflectionConfigurationFiles=/path/to/reflect-config.json
option of the native-image
GraalVM utility.
This allows picocli-based applications to be compiled to a native image.
Alternatively, the generated configuration
files can be supplied to the native-image
tool by placing them in a
META-INF/native-image/
directory on the class path, for example, in a JAR file used in the image build.
This directory (or any of its subdirectories) is searched for files with the names jni-config.json
,
reflect-config.json
, proxy-config.json
and resource-config.json
, which are then automatically
included in the build. Not all of those files must be present.
When multiple files with the same name are found, all of them are included.
If necessary, it is possible to exclude classes with system property picocli.codegen.excludes
,
which accepts a comma-separated list of regular expressions of the fully qualified class names that should
not be included in the resulting JSON String.
- Since:
- 3.7.0
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionstatic String
Returns a JSON String with the program elements that will be accessed reflectively for the specifiedCommandSpec
objects.static void
Runs this class as a standalone application, printing the resulting JSON String to a file or toSystem.out
.
-
Constructor Details
-
ReflectionConfigGenerator
public ReflectionConfigGenerator()
-
-
Method Details
-
main
Runs this class as a standalone application, printing the resulting JSON String to a file or toSystem.out
.- Parameters:
args
- one or more fully qualified class names of@Command
-annotated classes.
-
generateReflectionConfig
public static String generateReflectionConfig(CommandLine.Model.CommandSpec... specs) throws Exception Returns a JSON String with the program elements that will be accessed reflectively for the specifiedCommandSpec
objects.- Parameters:
specs
- one or moreCommandSpec
objects to inspect- Returns:
- a JSON String in the format
required by the
-H:ReflectionConfigurationFiles=/path/to/reflect-config.json
option of the GraalVMnative-image
utility. - Throws:
NoSuchFieldException
- if a problem occurs while processing the specified specsIllegalAccessException
- if a problem occurs while processing the specified specsException
-