or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

docs

core-model.mdindex.mdplugin-registry.mdsnapshot-management.mdxml-processing.md
tile.json

plugin-registry.mddocs/

Plugin Registry

Plugin mapping information for groupId-level metadata, enabling Maven plugin resolution by prefix and maintaining plugin directory indices.

Capabilities

Plugin Class

Plugin information for groupId directories, providing mappings between plugin prefixes, names, and artifactIds.

/**
 * Plugin mapping information for groupId directories
 * Maps plugin prefixes to artifactIds for Maven plugin resolution
 */
public class Plugin implements Serializable, Cloneable {
  // Constructors
  public Plugin();
  
  // Plugin identification
  public String getName();
  public void setName(String name);
  public String getPrefix();
  public void setPrefix(String prefix);
  public String getArtifactId();
  public void setArtifactId(String artifactId);
  
  // Object operations
  public Plugin clone();
}

Usage Examples:

import org.apache.maven.artifact.repository.metadata.Plugin;

// Create plugin mapping for compiler plugin
Plugin compilerPlugin = new Plugin();
compilerPlugin.setName("Apache Maven Compiler Plugin");
compilerPlugin.setPrefix("compiler");
compilerPlugin.setArtifactId("maven-compiler-plugin");

// Create plugin mapping for surefire plugin
Plugin surefirePlugin = new Plugin();
surefirePlugin.setName("Maven Surefire Plugin");
surefirePlugin.setPrefix("surefire");
surefirePlugin.setArtifactId("maven-surefire-plugin");

// Plugin properties
System.out.println("Plugin name: " + compilerPlugin.getName());
System.out.println("Plugin prefix: " + compilerPlugin.getPrefix());
System.out.println("Plugin artifactId: " + compilerPlugin.getArtifactId());

Plugin Management in Metadata

Plugin registration and management at the groupId level for enabling prefix-based plugin resolution.

// Plugin management methods in Metadata class
public List<Plugin> getPlugins();
public void setPlugins(List<Plugin> plugins);
public void addPlugin(Plugin plugin);
public void removePlugin(Plugin plugin);

Usage Examples:

import org.apache.maven.artifact.repository.metadata.Metadata;
import org.apache.maven.artifact.repository.metadata.Plugin;
import java.util.List;

// Create groupId-level metadata
Metadata groupMetadata = new Metadata();
groupMetadata.setGroupId("org.apache.maven.plugins");

// Add compiler plugin
Plugin compilerPlugin = new Plugin();
compilerPlugin.setName("Apache Maven Compiler Plugin");
compilerPlugin.setPrefix("compiler");
compilerPlugin.setArtifactId("maven-compiler-plugin");
groupMetadata.addPlugin(compilerPlugin);

// Add surefire plugin
Plugin surefirePlugin = new Plugin();
surefirePlugin.setName("Maven Surefire Plugin");
surefirePlugin.setPrefix("surefire");
surefirePlugin.setArtifactId("maven-surefire-plugin");
groupMetadata.addPlugin(surefirePlugin);

// Add failsafe plugin
Plugin failsafePlugin = new Plugin();
failsafePlugin.setName("Maven Failsafe Plugin");
failsafePlugin.setPrefix("failsafe");
failsafePlugin.setArtifactId("maven-failsafe-plugin");
groupMetadata.addPlugin(failsafePlugin);

// Access plugin list
List<Plugin> plugins = groupMetadata.getPlugins();
System.out.println("Number of plugins: " + plugins.size());

// Find plugin by prefix
for (Plugin plugin : plugins) {
    if ("compiler".equals(plugin.getPrefix())) {
        System.out.println("Found compiler plugin: " + plugin.getArtifactId());
        break;
    }
}

// Remove a plugin
groupMetadata.removePlugin(failsafePlugin);

Plugin Resolution Workflow

How plugins are resolved using the registry information stored in groupId-level metadata.

Plugin Resolution Process:

  1. Prefix lookup: Maven searches groupId-level metadata for plugin prefix
  2. ArtifactId mapping: Maps prefix to specific artifactId
  3. Plugin loading: Loads plugin using resolved groupId/artifactId combination

Example Resolution:

// When user runs: mvn compiler:compile
// Maven resolves this to: org.apache.maven.plugins:maven-compiler-plugin

// Step 1: Look in org.apache.maven.plugins group metadata
Metadata groupMetadata = readGroupMetadata("org.apache.maven.plugins");

// Step 2: Find plugin with prefix "compiler"
Plugin resolvedPlugin = null;
for (Plugin plugin : groupMetadata.getPlugins()) {
    if ("compiler".equals(plugin.getPrefix())) {
        resolvedPlugin = plugin;
        break;
    }
}

// Step 3: Use resolved artifactId
if (resolvedPlugin != null) {
    String artifactId = resolvedPlugin.getArtifactId(); // "maven-compiler-plugin"
    // Maven can now load: org.apache.maven.plugins:maven-compiler-plugin
}

Plugin Metadata Merging

Plugin merging logic during metadata consolidation from multiple sources.

Merging Behavior:

  • Deduplication by prefix: Plugins with same prefix are not duplicated
  • No overwrites: Existing plugins are preserved during merge operations
  • Additive merging: New plugins from source metadata are added to target

Usage Examples:

// Local metadata with some plugins
Metadata localMetadata = new Metadata();
localMetadata.setGroupId("org.apache.maven.plugins");

Plugin compilerPlugin = new Plugin();
compilerPlugin.setPrefix("compiler");
compilerPlugin.setArtifactId("maven-compiler-plugin");
localMetadata.addPlugin(compilerPlugin);

// Remote metadata with additional plugins
Metadata remoteMetadata = new Metadata();
remoteMetadata.setGroupId("org.apache.maven.plugins");

Plugin surefirePlugin = new Plugin();
surefirePlugin.setPrefix("surefire");
surefirePlugin.setArtifactId("maven-surefire-plugin");
remoteMetadata.addPlugin(surefirePlugin);

// Merge remote plugins into local metadata
boolean changed = localMetadata.merge(remoteMetadata);
if (changed) {
    // Local metadata now contains both compiler and surefire plugins
    System.out.println("Plugins merged successfully");
    System.out.println("Total plugins: " + localMetadata.getPlugins().size());
}

Common Plugin Prefixes

Standard Maven plugin prefixes commonly found in repositories:

PrefixArtifactIdPurpose
compilermaven-compiler-pluginJava compilation
surefiremaven-surefire-pluginUnit test execution
failsafemaven-failsafe-pluginIntegration test execution
jarmaven-jar-pluginJAR file creation
warmaven-war-pluginWAR file creation
cleanmaven-clean-pluginClean lifecycle
installmaven-install-pluginInstall to local repository
deploymaven-deploy-pluginDeploy to remote repository
sitemaven-site-pluginSite generation
assemblymaven-assembly-pluginAssembly creation

Error Handling

Plugin registry includes robust error handling:

  • Null safety: Empty plugin lists instead of null collections
  • Clone support: Deep cloning preserves all plugin data
  • Serialization: Full serialization support for persistence
  • Duplicate prevention: Merge operations prevent duplicate prefixes