Plugin mapping information for groupId-level metadata, enabling Maven plugin resolution by prefix and maintaining plugin directory indices.
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 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);How plugins are resolved using the registry information stored in groupId-level metadata.
Plugin Resolution Process:
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 merging logic during metadata consolidation from multiple sources.
Merging Behavior:
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());
}Standard Maven plugin prefixes commonly found in repositories:
| Prefix | ArtifactId | Purpose |
|---|---|---|
| compiler | maven-compiler-plugin | Java compilation |
| surefire | maven-surefire-plugin | Unit test execution |
| failsafe | maven-failsafe-plugin | Integration test execution |
| jar | maven-jar-plugin | JAR file creation |
| war | maven-war-plugin | WAR file creation |
| clean | maven-clean-plugin | Clean lifecycle |
| install | maven-install-plugin | Install to local repository |
| deploy | maven-deploy-plugin | Deploy to remote repository |
| site | maven-site-plugin | Site generation |
| assembly | maven-assembly-plugin | Assembly creation |
Plugin registry includes robust error handling: