# Annotation Type ComponentType

@Retention(RUNTIME) @Target(METHOD) @Incubating @Deprecated public @interface ComponentType
Deprecated.
The Gradle software model is deprecated and will be removed in Gradle 10. Use the new component model (e.g. `cpp-application`, `cpp-library`, `swift-application`, `swift-library`, `xctest`) instead.
Declares a custom `ComponentSpec` type. The following example demonstrates how to register a custom component type using a plugin with a `ComponentType` annotation. Furthermore the plugin creates an instance of SampleComponent named 'sampleComponent'.

    interface SampleComponent extends ComponentSpec {}
    class DefaultSampleComponent extends BaseComponentSpec implements SampleComponent {}

    apply plugin: MySamplePlugin

    class MySamplePlugin extends RuleSource {
        @ComponentType
        void register(TypeBuilder<SampleComponent> builder) {
            builder.defaultImplementation(DefaultSampleComponent)
        }

        @Mutate
        void createSampleLibraryComponents(ModelMap<SampleComponent> componentSpecs) {
            componentSpecs.create("sampleComponent")
        }
    }