CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/maven-io-quarkus--quarkus-arc-deployment

Quarkus ArC deployment module providing build-time CDI optimization and configuration capabilities

Pending
Overview
Eval results
Files

configuration.mddocs/

Configuration

ArC deployment provides comprehensive build-time configuration interfaces for customizing CDI container behavior, bean discovery, optimization settings, and development features.

Capabilities

Main Configuration

Primary configuration interface controlling core CDI behavior and optimization settings.

/**
 * Main configuration interface for ArC CDI settings at build time
 */
public interface ArcConfig {
    /**
     * Controls bean removal strategy during optimization
     * Values: "all", "none", "fwk", "framework-only"
     */
    String removeUnusedBeans();
    
    /**
     * Enable automatic field injection without @Inject
     */
    boolean autoInjectFields();
    
    /**
     * Transform classes that cannot be proxied by CDI
     */
    boolean transformUnproxyableClasses();
    
    /**
     * Transform private fields for injection
     */
    boolean transformPrivateInjectedFields();
    
    /**
     * Fail build if intercepted private methods are detected
     */
    boolean failOnInterceptedPrivateMethod();
    
    /**
     * List of selected alternative bean classes
     */
    Optional<List<String>> selectedAlternatives();
    
    /**
     * Enable automatic producer method generation
     */
    boolean autoProducerMethods();
    
    /**
     * Type exclusion patterns for bean discovery
     */
    Optional<List<String>> excludeTypes();
    
    /**
     * Patterns for beans that should never be removed
     */
    Optional<List<String>> unremovableTypes();
    
    /**
     * Dependency exclusion configuration by artifact
     */
    Map<String, IndexDependencyConfig> excludeDependency();
    
    /**
     * Detect false positives in unused bean detection
     */
    boolean detectUnusedFalsePositives();
    
    /**
     * Detect wrong usage of annotations (e.g., wrong @Singleton)
     */
    boolean detectWrongAnnotations();
    
    /**
     * Enable strict CDI compatibility mode
     */
    boolean strictCompatibility();
    
    /**
     * Development mode specific configuration
     */
    ArcDevModeConfig devMode();
    
    /**
     * Test mode specific configuration
     */
    ArcTestConfig test();
    
    /**
     * Split packages to ignore during validation
     */
    Optional<List<String>> ignoredSplitPackages();
    
    /**
     * Context propagation configuration
     */
    ArcContextPropagationConfig contextPropagation();
    
    /**
     * Context optimization settings
     */
    OptimizeContexts optimizeContexts();
    
    /**
     * Validate removeUnusedBeans configuration value
     */
    boolean isRemoveUnusedBeansFieldValid();
    
    /**
     * Check if bean removal should be enabled based on configuration
     */
    boolean shouldEnableBeanRemoval();
    
    /**
     * Check if only application beans should be kept
     */
    boolean shouldOnlyKeepAppBeans();
}

Usage Examples:

// Access configuration in build step
@BuildStep
void configureBeanRemoval(ArcConfig config, BuildProducer<UnremovableBeanBuildItem> unremovable) {
    if (!config.shouldEnableBeanRemoval()) {
        // Disable bean removal for all beans
        unremovable.produce(UnremovableBeanBuildItem.beanTypes(Object.class));
    }
    
    // Process unremovable type patterns
    config.unremovableTypes().ifPresent(patterns -> {
        for (String pattern : patterns) {
            unremovable.produce(new UnremovableBeanBuildItem(
                beanInfo -> beanInfo.getBeanClass().toString().matches(pattern)
            ));
        }
    });
}

Development Mode Configuration

Configuration specific to development mode for enhanced debugging and hot reload capabilities.

/**
 * Configuration for development mode features
 */
public interface ArcDevModeConfig {
    /**
     * Enable monitoring of file changes for hot reload
     */
    boolean monitoringEnabled();
    
    /**
     * Enable lifecycle event debugging
     */
    boolean lifecycleEvents();
}

Test Configuration

Configuration for test-specific CDI behavior and test-related bean handling.

/**
 * Configuration for test mode
 */
public interface ArcTestConfig {
    /**
     * Enable test-specific bean discovery
     */
    boolean disableApplicationIndex();
    
    /**
     * Configure test bean transformation
     */
    boolean transformTestClasses();
}

Context Propagation Configuration

Configuration for context propagation across different execution contexts.

/**
 * Configuration for context propagation features
 */
public interface ArcContextPropagationConfig {
    /**
     * Enable context propagation support
     */
    boolean enabled();
    
    /**
     * Configure which contexts to propagate
     */
    Optional<List<String>> propagatedContexts();
}

Index Dependency Configuration

Configuration for controlling which dependencies are included in the bean archive index.

/**
 * Configuration for index dependency exclusions
 */
public interface IndexDependencyConfig {
    /**
     * Maven group ID to exclude
     */
    Optional<String> groupId();
    
    /**
     * Maven artifact ID to exclude
     */
    Optional<String> artifactId();
    
    /**
     * Maven classifier to exclude
     */
    Optional<String> classifier();
}

Configuration Build Items

Build items that provide configuration data to the build process.

/**
 * Configuration properties for CDI
 */
public class ConfigPropertyBuildItem extends MultiBuildItem {
    public ConfigPropertyBuildItem(String propertyName, String defaultValue);
    public ConfigPropertyBuildItem(String propertyName, String defaultValue, String configPhase);
    
    public String getPropertyName();
    public String getDefaultValue();
    public String getConfigPhase();
}

/**
 * Custom scope annotations discovered in configuration  
 */
public class CustomScopeAnnotationsBuildItem extends SimpleBuildItem {
    public CustomScopeAnnotationsBuildItem(Set<DotName> scopes);
    public Set<DotName> getScopes();
}

Usage Examples:

// Register configuration properties
@BuildStep
ConfigPropertyBuildItem addConfigProperty() {
    return new ConfigPropertyBuildItem(
        "quarkus.arc.remove-unused-beans",
        "all",
        "BUILD_TIME"
    );
}

// Provide custom scope annotations
@BuildStep
CustomScopeAnnotationsBuildItem customScopes() {
    return new CustomScopeAnnotationsBuildItem(
        Set.of(
            DotName.createSimple("com.example.TenantScoped"),
            DotName.createSimple("com.example.RequestScoped")
        )
    );
}

Configuration Enums

Enumeration types used in configuration interfaces.

/**
 * Context optimization strategies
 */
public enum OptimizeContexts {
    /**
     * Automatically determine optimization based on usage
     */
    AUTO,
    
    /**
     * Force enable context optimization
     */
    ENABLED,
    
    /**
     * Disable context optimization
     */
    DISABLED
}

/**
 * Bean removal strategies
 */
public interface RemoveUnusedBeansStrategy {
    String ALL = "all";           // Remove all unused beans
    String NONE = "none";         // Keep all beans  
    String FWK = "fwk";          // Remove only framework beans
    String FRAMEWORK_ONLY = "framework-only";  // Alias for fwk
}

Configuration Usage Patterns

Build-Time Configuration Access

@BuildStep
void processConfiguration(ArcConfig arcConfig) {
    // Access configuration values
    String removalStrategy = arcConfig.removeUnusedBeans();
    boolean autoInject = arcConfig.autoInjectFields();
    
    // Process conditional configuration
    if (arcConfig.strictCompatibility()) {
        // Enable strict CDI compatibility checks
    }
    
    // Handle optional configuration
    arcConfig.selectedAlternatives().ifPresent(alternatives -> {
        // Process selected alternatives
        for (String alternative : alternatives) {
            // Register alternative beans
        }
    });
}

Configuration-Driven Build Steps

@BuildStep
@Record(ExecutionTime.STATIC_INIT)
void configureBeanContainer(ArcConfig config, 
                           ArcRecorder recorder,
                           BuildProducer<BeanContainerListenerBuildItem> listeners) {
    
    if (config.devMode().monitoringEnabled()) {
        listeners.produce(new BeanContainerListenerBuildItem(
            recorder.createDevModeListener()
        ));
    }
    
    if (config.detectWrongAnnotations()) {
        listeners.produce(new BeanContainerListenerBuildItem(
            recorder.createAnnotationValidator()
        ));
    }
}

Dynamic Configuration

Configuration can be accessed and used dynamically during build steps to customize behavior based on user settings, detected project characteristics, or environmental conditions.

Install with Tessl CLI

npx tessl i tessl/maven-io-quarkus--quarkus-arc-deployment

docs

advanced-features.md

bean-container.md

build-items.md

configuration.md

index.md

processors.md

tile.json