Package io.gdcc.spi.meta.processor


package io.gdcc.spi.meta.processor
Provides annotation-processing support for generation of Dataverse Plugin Metadata.

This package contains compile-time infrastructure for validating plugin declarations and producing metadata resources consumed by the runtime plugin loading mechanism.

Overview

The processor in this package connects the declaration model in io.gdcc.spi.meta.annotations, the core SPI contracts in io.gdcc.spi.meta.plugin, and the descriptor model in io.gdcc.spi.meta.descriptor.

It evaluates @DataversePlugin, @PluginContract, and @RequiredProvider declarations on types derived from Plugin and CoreProvider, validates their structure, and generates serialized descriptor resources in the format defined by DescriptorFormat.

Generated metadata

The primary generated output is descriptor metadata under "META-INF/dataverse/plugins/". These descriptors are intended to serve as the authoritative source for plugin discovery and compatibility metadata, and may later be discovered by DescriptorScanner and resolved into runtime-facing models such as PluginDescriptor by the plugin loader.

For compatibility with older runtime environments, the processor may also emit META-INF/services resources. That mechanism is transitional: descriptor-based discovery is the preferred direction, as it avoids several class-loading and isolation limitations associated with ServiceLoader-based loading alone.

Maven configuration

On JDK 22 and newer, annotation processors should be configured explicitly in the build. In Maven, this is typically done through the maven-compiler-plugin, for example:


 <build>
   <plugins>
     <plugin>
       <artifactId>maven-compiler-plugin</artifactId>
       <configuration>
         <annotationProcessorPaths>
           <path>
             <groupId>io.gdcc</groupId>
             <artifactId>dataverse-spi</artifactId>
             <version>${spi.version}</version>
           </path>
         </annotationProcessorPaths>
       </configuration>
     </plugin>
   </plugins>
 </build>
 

Types in this package are mainly internal build-time infrastructure rather than part of the public runtime API.