Spring load non-fatal errors ClassNotFoundException

I am trying to create a Spring boot application to work with Apache ActiveMQ.

When I start, I get the following non-fatal errors:

java.lang.ClassNotFoundException: org.springframework.data.web.config.EnableSpringDataWebSupport at java.net.URLClassLoader$1.run(Unknown Source) ~[na:1.8.0_25] at java.net.URLClassLoader$1.run(Unknown Source) ~[na:1.8.0_25] at java.security.AccessController.doPrivileged(Native Method) ~[na:1.8.0_25] at java.net.URLClassLoader.findClass(Unknown Source) ~[na:1.8.0_25] at java.lang.ClassLoader.loadClass(Unknown Source) ~[na:1.8.0_25] at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) ~[na:1.8.0_25] at java.lang.ClassLoader.loadClass(Unknown Source) ~[na:1.8.0_25] java.lang.ClassNotFoundException: org.springframework.security.config.annotation.web.configuration.EnableWebSecurity at java.net.URLClassLoader$1.run(Unknown Source) ~[na:1.8.0_25] at java.net.URLClassLoader$1.run(Unknown Source) ~[na:1.8.0_25] at java.security.AccessController.doPrivileged(Native Method) ~[na:1.8.0_25] at java.net.URLClassLoader.findClass(Unknown Source) ~[na:1.8.0_25] at java.lang.ClassLoader.loadClass(Unknown Source) ~[na:1.8.0_25] at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) ~[na:1.8.0_25] at java.lang.ClassLoader.loadClass(Unknown Source) ~[na:1.8.0_25] 

These are my files:

 @Configuration @EnableJms public class ActiveMQTestConfig { @Bean // Strictly speaking this bean is not necessary as boot creates a default JmsListenerContainerFactory<?> myJmsContainerFactory(ConnectionFactory connectionFactory) { SimpleJmsListenerContainerFactory factory = new SimpleJmsListenerContainerFactory(); factory.setConnectionFactory(connectionFactory); return factory; } } @Configuration @ComponentScan("com.example.messages") @SpringBootApplication public class TestConfig { } @Component public class Receiver { /** * Get a copy of the application context */ @Autowired ConfigurableApplicationContext context; /** * When you receive a message, print it out, then shut down the application. * Finally, clean up any ActiveMQ server stuff. */ @JmsListener(destination = "mailbox-destination", containerFactory = "myJmsContainerFactory") public void receiveMessage(String message) { System.out.println("Received <" + message + ">"); context.close(); FileSystemUtils.deleteRecursively(new File("activemq-data")); } } @SpringApplicationConfiguration(classes = { TestConfig.class, ActiveMQTestConfig.class }) @RunWith(SpringJUnit4ClassRunner.class) public class ReceiverTest { @Autowired private JmsTemplate jmsTemplate; @Test public void testReceiver() { // Clean out any ActiveMQ data from a previous run FileSystemUtils.deleteRecursively(new File("activemq-data")); // Send a message MessageCreator messageCreator = new MessageCreator() { @Override public Message createMessage(Session session) throws JMSException { return session.createTextMessage("ping!"); } }; System.out.println("Sending a new message."); jmsTemplate.send("mailbox-destination", messageCreator); } } 

Logging Configuration - logback.xml

 <?xml version="1.0" encoding="UTF-8"?> <configuration> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <layout class="ch.qos.logback.classic.PatternLayout"> <Pattern> %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n </Pattern> </layout> </appender> <logger name="org.springframework" level="debug" additivity="false"> <appender-ref ref="STDOUT" /> </logger> <root level="error"> <appender-ref ref="STDOUT" /> </root> </configuration> 

Parent-pom dependency configuration:

 <!-- jUnit --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>${junit.version}</version> <scope>test</scope> </dependency> <!-- Aspectj --> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjrt</artifactId> <version>${aspectj.version}</version> </dependency> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>${aspectj.version}</version> </dependency> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjtools</artifactId> <version>${aspectj.version}</version> </dependency> <!-- Spring --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-expression</artifactId> <version>${spring.version}</version> </dependency> <!-- Spring boot --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot</artifactId> <version>${spring.boot.version}</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-autoconfigure</artifactId> <version>${spring.boot.version}</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-logging</artifactId> <version>${spring.boot.version}</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <version>${spring.boot.version}</version> <scope>test</scope> </dependency> <dependency> <groupId>javax.enterprise</groupId> <artifactId>cdi-api</artifactId> <version>${cdi-api.version}</version> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>${commons-lang3.version}</version> </dependency> <dependency> <groupId>commons-validator</groupId> <artifactId>commons-validator</artifactId> <version>${commons-validator.version}</version> </dependency> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>${commons-io.version}</version> </dependency> <!-- Logging --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>${slf4j.version}</version> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>${logback.version}</version> </dependency> 

Dependency configuration for this project:

 <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jms</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.apache.activemq</groupId> <artifactId>activemq-broker</artifactId> <version>${activemq.version}</version> </dependency> 

How to prevent Spring Boot from finding unused classes and annotations? I do not need any material related to the network in this project.

+7
spring spring-boot activemq
source share
3 answers

Spring’s automatic boot configuration works with feature detection, just like regular Spring in specific places (for example, dynamically switching between versions of Hibernate).

The discovery function works by checking if any known classes / methods / annotations of the framework, library or JDK are available. If this feature is not available.

Spring Boot is no different, it just checks if the class is available. In your case, this is for Spring Data REST and Spring Security. To debug Spring Download logs that are not found in DEBUG. This is for troubleshooting, if something does not work, you can see what part of the library you are missing.

To disable logging, just do not register everything in DEBUG.

+11
source share

Include the following options

  <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-commons</artifactId> <version>1.10.0.RELEASE</version> </dependency> 
+4
source share

There is an explanation: https://github.com/spring-projects/spring-boot/issues/4121 "Spring Framework uses ASM to view bytecode. In this case, it found an annotation that does not apply to the class path. This means that annotation metadata will be unavailable, nothing more. When the class is loaded, the JVM discards the annotation because it is not on the class path.

0
source share

All Articles