Class ReflectionConfigGenerator


  • public class ReflectionConfigGenerator
    extends java.lang.Object
    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
    • Field Detail

      • SYSPROP_CODEGEN_EXCLUDES

        private static final java.lang.String SYSPROP_CODEGEN_EXCLUDES
        See Also:
        Constant Field Values
      • REFLECTED_FIELD_BINDING_CLASS

        private static final java.lang.String REFLECTED_FIELD_BINDING_CLASS
        See Also:
        Constant Field Values
      • REFLECTED_METHOD_BINDING_CLASS

        private static final java.lang.String REFLECTED_METHOD_BINDING_CLASS
        See Also:
        Constant Field Values
      • REFLECTED_PROXY_METHOD_BINDING_CLASS

        private static final java.lang.String REFLECTED_PROXY_METHOD_BINDING_CLASS
        See Also:
        Constant Field Values
      • REFLECTED_FIELD_BINDING_FIELD

        private static final java.lang.String REFLECTED_FIELD_BINDING_FIELD
        See Also:
        Constant Field Values
      • REFLECTED_METHOD_BINDING_METHOD

        private static final java.lang.String REFLECTED_METHOD_BINDING_METHOD
        See Also:
        Constant Field Values
      • REFLECTED_BINDING_FIELD_SCOPE

        private static final java.lang.String REFLECTED_BINDING_FIELD_SCOPE
        See Also:
        Constant Field Values
    • Constructor Detail

      • ReflectionConfigGenerator

        public ReflectionConfigGenerator()
    • Method Detail

      • main

        public static void main​(java.lang.String... args)
        Runs this class as a standalone application, printing the resulting JSON String to a file or to System.out.
        Parameters:
        args - one or more fully qualified class names of @Command-annotated classes.
      • generateReflectionConfig

        public static java.lang.String generateReflectionConfig​(CommandLine.Model.CommandSpec... specs)
                                                         throws java.lang.Exception
        Returns a JSON String with the program elements that will be accessed reflectively for the specified CommandSpec objects.
        Parameters:
        specs - one or more CommandSpec objects to inspect
        Returns:
        a JSON String in the format required by the -H:ReflectionConfigurationFiles=/path/to/reflect-config.json option of the GraalVM native-image utility.
        Throws:
        java.lang.NoSuchFieldException - if a problem occurs while processing the specified specs
        java.lang.IllegalAccessException - if a problem occurs while processing the specified specs
        java.lang.Exception