0
respostas

[Bug] Erro ao final da aula 3

Ao tentar executar o projeto banking-validation ao final da aula 3 eu estou com o erro:

2025-07-11 12:17:49,246 INFO  [io.qua.dep.dev.IsolatedDevModeMain] (main) Attempting to start live reload endpoint to recover from previous Quarkus startup failure
2025-07-11 12:17:49,808 ERROR [io.qua.dep.dev.IsolatedDevModeMain] (main) Failed to start quarkus: java.lang.RuntimeException: io.quarkus.builder.BuildException: Build failure: Build failed due to errors
    [error]: Build step io.quarkus.arc.deployment.ArcProcessor#validate threw an exception: jakarta.enterprise.inject.spi.DeploymentException: jakarta.enterprise.inject.UnsatisfiedResolutionException: Unsatisfied dependency for type org.apache.kafka.clients.producer.KafkaProducer<java.lang.String, java.lang.String> and qualifiers [@Default]
    - injection target: parameter 'producer' of br.com.alura.KafkaConfiguration constructor
    - declared on CLASS bean [types=[br.com.alura.KafkaConfiguration, java.lang.Object], qualifiers=[@Default, @Any], target=br.com.alura.KafkaConfiguration]
    at io.quarkus.arc.processor.BeanDeployment.processErrors(BeanDeployment.java:1551)
    at io.quarkus.arc.processor.BeanDeployment.init(BeanDeployment.java:338)
    at io.quarkus.arc.processor.BeanProcessor.initialize(BeanProcessor.java:167)
    at io.quarkus.arc.deployment.ArcProcessor.validate(ArcProcessor.java:490)
    at java.base/java.lang.invoke.MethodHandle.invokeWithArguments(MethodHandle.java:733)
    at io.quarkus.deployment.ExtensionLoader$3.execute(ExtensionLoader.java:856)
    at io.quarkus.builder.BuildContext.run(BuildContext.java:256)
    at org.jboss.threads.ContextHandler$1.runWith(ContextHandler.java:18)
    at org.jboss.threads.EnhancedQueueExecutor$Task.doRunWith(EnhancedQueueExecutor.java:2516)
    at org.jboss.threads.EnhancedQueueExecutor$Task.run(EnhancedQueueExecutor.java:2495)
    at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1521)
    at java.base/java.lang.Thread.run(Thread.java:1583)
    at org.jboss.threads.JBossThread.run(JBossThread.java:483)
Caused by: jakarta.enterprise.inject.UnsatisfiedResolutionException: Unsatisfied dependency for type org.apache.kafka.clients.producer.KafkaProducer<java.lang.String, java.lang.String> and qualifiers [@Default]
    - injection target: parameter 'producer' of br.com.alura.KafkaConfiguration constructor
    - declared on CLASS bean [types=[br.com.alura.KafkaConfiguration, java.lang.Object], qualifiers=[@Default, @Any], target=br.com.alura.KafkaConfiguration]
    ...

Minha classe KafkaConfiguration:

package br.com.alura;

import io.quarkus.logging.Log;
import jakarta.enterprise.context.ApplicationScoped;
import org.apache.kafka.clients.producer.KafkaProducer;
import org.apache.kafka.clients.producer.ProducerConfig;
import org.apache.kafka.clients.producer.ProducerRecord;
import org.apache.kafka.common.serialization.StringSerializer;
import org.eclipse.microprofile.config.Config;

import java.util.Properties;

@ApplicationScoped
public class KafkaConfiguration {

    private final KafkaProducer<String, String> producer;

    public KafkaConfiguration(Config config, KafkaProducer<String, String> producer) {
        String kafkaHost = config.getValue("producer.kafka.host", String.class);
        Properties props = new Properties();
        props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, kafkaHost);
        props.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName());
        props.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName());
        this.producer = new KafkaProducer<>(props);
    }

    public void enviarMensagem(String topico, String mensagem) {
        ProducerRecord<String, String> record = new ProducerRecord<>(topico, mensagem);
        producer.send(record, (metadata, exception) -> {
            if (exception == null) {
                Log.info("Mensagem enviada: " + metadata.offset());
            } else {
                Log.error("Erro: " + exception.getMessage());
                exception.getStackTrace();
            }
        });
    }
}