Невозможно запустить Java-приложение прослушивателя с помощью ActiveMQ в IntelliJ

У меня есть приложение-прослушиватель Java MQ, которое прослушивает очередь. Когда я использую его локально, я использую ActiveMQ для отправки сообщений, моя проблема:

У меня возникла проблема при попытке запустить это приложение-прослушиватель в IntelliJ с использованием ActiveMQ. Когда я использую Eclipse с использованием ActiveMQ, он работает отлично, это одно и то же приложение, я думаю, что это связано с моей конфигурацией обмена сообщениями IntelliJ.

Это мой класс JmsConfig:

package br.com.company.hub.mq.app.jms;

import javax.jms.ConnectionFactory;
import javax.jms.JMSException;

import org.apache.activemq.ActiveMQConnectionFactory;
import org.apache.camel.component.jms.JmsComponent;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jms.core.JmsTemplate;

import com.ibm.msg.client.jms.JmsConnectionFactory;
import com.ibm.msg.client.jms.JmsConstants;
import com.ibm.msg.client.jms.JmsFactoryFactory;
import com.ibm.msg.client.wmq.common.CommonConstants;

/** Configuration class for creating mq connection and jms component */

@Configuration
public class JmsConfig {

  private String host;
  private Integer port;
  private String queueManager;
  private String channel;

  public JmsConfig(@Value("${queue.host}") String host, @Value("${queue.port}") Integer port,
      @Value("${queue.queue-manager}") String queueManager, @Value("${queue.channel}") String channel) {

    this.host = host;
    this.port = port;
    this.queueManager = queueManager;
    this.channel = channel;
  }

  @Bean("jmsConnectionFactory")
  @ConditionalOnProperty(value = "is-localhost", havingValue = "true", matchIfMissing = false)
  public ConnectionFactory activeMqConnectionFactory() {
    return new ActiveMQConnectionFactory("tcp://localhost:61616");
  }

  @Bean("jmsConnectionFactory")
  @ConditionalOnProperty(value = "is-localhost", havingValue = "false", matchIfMissing = false)
  public ConnectionFactory ibmMqConnectionFactory() throws JMSException {

    final JmsFactoryFactory ff = JmsFactoryFactory.getInstance(JmsConstants.WMQ_PROVIDER);
    final JmsConnectionFactory cf = ff.createConnectionFactory();

    cf.setStringProperty(CommonConstants.WMQ_HOST_NAME, this.host);
    cf.setStringProperty(CommonConstants.WMQ_QUEUE_MANAGER, this.queueManager);
    cf.setStringProperty(CommonConstants.WMQ_CHANNEL, this.channel);
    cf.setIntProperty(CommonConstants.WMQ_PORT, this.port);
    cf.setIntProperty(CommonConstants.WMQ_CONNECTION_MODE, CommonConstants.WMQ_CM_BINDINGS_THEN_CLIENT);
    cf.setIntProperty(CommonConstants.WMQ_CLIENT_RECONNECT_OPTIONS, CommonConstants.WMQ_CLIENT_RECONNECT_Q_MGR);

    return cf;
  }

  @Bean
  public JmsTemplate jmsTemplate(final ConnectionFactory jmsConnectionFactory) {
    return new JmsTemplate(jmsConnectionFactory);
  }


  @Bean(name = "wmq")
  public JmsComponent jmsComponent(final ConnectionFactory jmsConnectionFactory) {
    return JmsComponent.jmsComponent(jmsConnectionFactory);
  }
}

Это зависимость ActiveMQ:

    <!-- MQ Local Tests -->
    <dependency>
        <groupId>org.apache.activemq</groupId>
        <artifactId>activemq-client</artifactId>
        <version>5.16.7</version>
        <scope>provided</scope>     
    </dependency>

Это ошибка, когда я запускаю ее:

 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ / _` | \ \ \ \
 \/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::                (v3.2.4)

14:26:09.702[-preinit] DEBUG                        org.jboss.logging  :  :  : Logging Provider: org.jboss.logging.Slf4jLoggerProvider found via system property
14:26:09.706[-preinit] INFO       o.h.validator.internal.util.Version  :  :  : HV000001: Hibernate Validator 8.0.1.Final
14:26:09.795[    main] INFO  .c.s.j.c.AppMQ  :  :  : Starting AppMQ using Java 17.0.9 with PID 12900 (C:\Repositories\app-mq-v1\target\classes started by xx in C:\Users\xxx\IdeaProjects\untitled)
14:26:09.795[    main] DEBUG .c.s.j.c.AppMQ  :  :  : Running with Spring Boot v3.2.4, Spring v6.1.5
14:26:09.797[    main] INFO  .c.s.j.c.AppMQ  :  :  : The following 1 profile is active: "dev"
14:26:11.960[    main] TRACE   o.s.c.c.CacheOrGroupedOpenApiCondition  :  :  : Condition CacheOrGroupedOpenApiCondition on org.springdoc.core.configuration.SpringDocConfiguration#springdocBeanFactoryPostProcessor did not match due to AnyNestedCondition 0 matched 2 did not; NestedCondition on CacheOrGroupedOpenApiCondition.OnCacheDisabled found non-matching nested conditions @ConditionalOnProperty (springdoc.cache.disabled) did not find property 'springdoc.cache.disabled'; NestedCondition on CacheOrGroupedOpenApiCondition.OnMultipleOpenApiSupportCondition AnyNestedCondition 0 matched 2 did not; NestedCondition on MultipleOpenApiSupportCondition.OnActuatorDifferentPort found non-matching nested conditions @ConditionalOnProperty (springdoc.show-actuator) did not find property 'springdoc.show-actuator'; NestedCondition on MultipleOpenApiSupportCondition.OnMultipleOpenApiSupportCondition AnyNestedCondition 0 matched 2 did not; NestedCondition on MultipleOpenApiGroupsCondition.OnGroupConfigProperty @ConditionalOnProperty (springdoc.group-configs[0].group) did not find property 'springdoc.group-configs[0].group'; NestedCondition on MultipleOpenApiGroupsCondition.OnGroupedOpenApiBean @ConditionalOnBean (types: org.springdoc.core.models.GroupedOpenApi; SearchStrategy: all) did not find any beans of type org.springdoc.core.models.GroupedOpenApi
14:26:11.993[    main] TRACE  o.s.c.c.MultipleOpenApiSupportCondition  :  :  : Condition MultipleOpenApiSupportCondition on org.springdoc.webmvc.core.configuration.MultipleOpenApiSupportConfiguration did not match due to AnyNestedCondition 0 matched 2 did not; NestedCondition on MultipleOpenApiSupportCondition.OnActuatorDifferentPort found non-matching nested conditions @ConditionalOnProperty (springdoc.show-actuator) did not find property 'springdoc.show-actuator'; NestedCondition on MultipleOpenApiSupportCondition.OnMultipleOpenApiSupportCondition AnyNestedCondition 0 matched 2 did not; NestedCondition on MultipleOpenApiGroupsCondition.OnGroupConfigProperty @ConditionalOnProperty (springdoc.group-configs[0].group) did not find property 'springdoc.group-configs[0].group'; NestedCondition on MultipleOpenApiGroupsCondition.OnGroupedOpenApiBean @ConditionalOnBean (types: org.springdoc.core.models.GroupedOpenApi; SearchStrategy: all) did not find any beans of type org.springdoc.core.models.GroupedOpenApi
14:26:13.741[    main] INFO  o.s.b.w.e.j.JettyServletWebServerFactory  :  :  : Server initialized with port: 7800
14:26:13.744[    main] INFO           org.eclipse.jetty.server.Server  :  :  : jetty-12.0.7; built: 2024-02-29T21:19:41.771Z; git: c89aca8fd34083befd79f328a3b8b6ffff04347e; jvm 17.0.9+11-LTS-201
14:26:13.810[    main] INFO      o.e.j.s.h.ContextHandler.application  :  :  : Initializing Spring embedded WebApplicationContext
14:26:13.810[    main] INFO  w.s.c.ServletWebServerApplicationContext  :  :  : Root WebApplicationContext: initialization completed in 3927 ms
14:26:14.342[    main] INFO     o.e.j.session.DefaultSessionIdManager  :  :  : Session workerName=node0
14:26:14.371[    main] INFO   o.e.jetty.server.handler.ContextHandler  :  :  : Started osbwej.JettyEmbeddedWebAppContext@24d7657b{application,/,b=[file:/C:/Users/xxx/AppData/Local/Temp/jetty-docbase.7800.15218493539891600500/, jar:file:///C:/Users/xxx/.m2/repository/org/webjars/swagger-ui/4.18.2/swagger-ui-4.18.2.jar!/META-INF/resources/],a=AVAILABLE,h=oeje10s.SessionHandler@72e49f6a{STARTED}}
14:26:14.372[    main] INFO     o.e.j.e.servlet.ServletContextHandler  :  :  : Started osbwej.JettyEmbeddedWebAppContext@24d7657b{application,/,b=[file:/C:/Users/xxx/AppData/Local/Temp/jetty-docbase.7800.15218493539891600500/, jar:file:///C:/Users/xxx/.m2/repository/org/webjars/swagger-ui/4.18.2/swagger-ui-4.18.2.jar!/META-INF/resources/],a=AVAILABLE,h=oeje10s.SessionHandler@72e49f6a{STARTED}}
14:26:14.378[    main] INFO           org.eclipse.jetty.server.Server  :  :  : Started oejs.Server@5072e638{STARTING}[12.0.7,sto=0] @7290ms
14:26:15.040[    main] WARN  ConfigServletWebServerApplicationContext  :  :  : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jmsConnectionFactory' defined in class path resource [br/com/company/hub/mq/app/jms/JmsConfig.class]: Failed to instantiate [javax.jms.ConnectionFactory]: Factory method 'activeMqConnectionFactory' threw exception with message: org/apache/activemq/ActiveMQConnectionFactory
14:26:15.055[    main] INFO           org.eclipse.jetty.server.Server  :  :  : Stopped oejs.Server@5072e638{STOPPING}[12.0.7,sto=0]
14:26:15.060[    main] INFO     o.e.j.e.servlet.ServletContextHandler  :  :  : Stopped osbwej.JettyEmbeddedWebAppContext@24d7657b{application,/,b=[file:/C:/Users/xxx/AppData/Local/Temp/jetty-docbase.7800.15218493539891600500/, jar:file:///C:/Users/xxx/.m2/repository/org/webjars/swagger-ui/4.18.2/swagger-ui-4.18.2.jar!/META-INF/resources/],a=AVAILABLE,h=oeje10s.SessionHandler@72e49f6a{STOPPED}}
14:26:15.086[    main] INFO  .s.b.a.l.ConditionEvaluationReportLogger  :  :  : 

Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled.
14:26:15.116[    main] ERROR               o.s.boot.SpringApplication  :  :  : Application run failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jmsConnectionFactory' defined in class path resource [br/com/company/hub/mq/app/jms/JmsConfig.class]: Failed to instantiate [javax.jms.ConnectionFactory]: Factory method 'activeMqConnectionFactory' threw exception with message: org/apache/activemq/ActiveMQConnectionFactory
    at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:648)
    at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:485)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1335)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1165)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:562)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:522)
    at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:975)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:962)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:624)
    at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146)
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754)
    at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:456)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:334)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1354)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1343)
    at br.com.company.jlcaml.clientintegration.AppMQ.main(AppMQ.java:12)
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [javax.jms.ConnectionFactory]: Factory method 'activeMqConnectionFactory' threw exception with message: org/apache/activemq/ActiveMQConnectionFactory
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:177)
    at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:644)
    ... 19 common frames omitted
Caused by: java.lang.NoClassDefFoundError: org/apache/activemq/ActiveMQConnectionFactory
    at br.com.company.hub.mq.app.jms.JmsConfig.activeMqConnectionFactory(JmsConfig.java:41)
    at br.com.company.hub.mq.app.jms.JmsConfig$$SpringCGLIB$$0.CGLIB$activeMqConnectionFactory$2(<generated>)
    at br.com.company.hub.mq.app.jms.JmsConfig$$SpringCGLIB$$FastClass$$1.invoke(<generated>)
    at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:258)
    at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:331)
    at br.com.company.hub.mq.app.jms.JmsConfig$$SpringCGLIB$$0.activeMqConnectionFactory(<generated>)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:568)
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:140)
    at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:644)
    at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:485)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1335)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1165)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:562)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:522)
    at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:975)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:962)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:624)
    at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146)
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754)
    at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:456)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:334)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1354)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1343)
Caused by: java.lang.ClassNotFoundException: org.apache.activemq.ActiveMQConnectionFactory
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520)
    at br.com.company.hub.mq.app.jms.JmsConfig.activeMqConnectionFactory(JmsConfig.java:41)
    at br.com.company.hub.mq.app.jms.JmsConfig$$SpringCGLIB$$0.CGLIB$activeMqConnectionFactory$2(<generated>)
    at br.com.company.hub.mq.app.jms.JmsConfig$$SpringCGLIB$$FastClass$$1.invoke(<generated>)
    at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:258)
    at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:331)
    at br.com.company.hub.mq.app.jms.JmsConfig$$SpringCGLIB$$0.activeMqConnectionFactory(<generated>)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:568)
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:140)
    at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:644)
    at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:485)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1335)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1165)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:562)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:522)
    at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:975)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:962)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:624)
    at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146)
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754)
    at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:456)

Process finished with exit code 1```

The focus is to discover which is the difference between IntelliJ and Eclipse when running this app. 

I tryed to install and uninstall IntelliJ several times, I also tryed to install a [JMS Messenger plugin](https://plugins.jetbrains.com/plugin/10949-jms-messenger) in IntelliJ but didn't work.
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
69
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Возможно, чтобы сделать то же самое со способом сборки и последующего запуска скомпилированного приложения.

В этом:

    <dependency>
        <groupId>org.apache.activemq</groupId>
        <artifactId>activemq-client</artifactId>
        <version>5.16.7</version>
        <scope>provided</scope>     
    </dependency>

удалить <scope>provided</scope>

причина: provided:

указывает, что вы ожидаете, что JDK или контейнер предоставит зависимость во время выполнения

и я полагаю, что Eclipse предоставит вам это. Если удалить это ключевое слово, будет использоваться область действия по умолчанию (compile), и эта зависимость станет доступной при запуске приложения.

См. https://maven.apache.org/guides/introduction/introduction-to-dependent-mechanism.html#Dependency_Scope

Другие вопросы по теме