Spring Загрузка GS: ComponentScan и ClassNotFoundException для ConnectionFactory
Я играю в руководстве по началу загрузки Spring, но автоматическая настройка не удалась, и я получаю:
java.lang.ClassNotFoundException: javax.jms.ConnectionFactory
Кажется, это связано с расположением класса Application. Где он должен быть расположен? В пакете верхнего уровня (src/main/java) или в определенном пакете?
Ответы
Ответ 1
Ваш класс Application
должен быть помещен в определенный пакет, а не в пакет по умолчанию (верхний уровень). Например, поместите его в com.example
и поместите весь свой код приложения в этот пакет или в подпакеты, например com.example.foo
и com.example.bar
.
Размещение вашего класса Application
в пакете по умолчанию, т.е. непосредственно в src/main/java
, не является хорошей идеей, и это почти наверняка приведет к тому, что ваше приложение не сработает. Если вы это сделаете, вы должны увидеть это предупреждение:
** WARNING ** : Your ApplicationContext is unlikely to start due to a @ComponentScan of the default package.
Ответ 2
Не помещайте класс приложения для загрузки в пакет по умолчанию. Это решит проблему.
Рабочий код:
package com.spring.boot.app;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
}
Ответ 3
Вам нужен основной класс для внутри пакета. Поскольку Spring загрузочная аннотация @SpringBootApplication будет искать пакет для сканирования при запуске приложения.
Итак, убедитесь, что над вашим основным файлом класса есть оператор пакета. Что это.
Ответ 4
У меня была та же проблема,
Вскоре я понял, что не включил мой основной метод в пакет.
После включения основного внутри пакета spring загрузка выполняется без сбоев.
Пример программы (Basic) -
package springbootquickstart;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class application {
public static void main(String[] args) {
// TODO Auto-generated method stub
SpringApplication.run(application.class, args);
}
}
Ответ 5
Ваша конфигурация должна выглядеть так, а Application.java должна быть в корне ваших пакетов. E.g/src/main/java/io/eddumelendez
io.eddumelendez - это мой пакет
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.2.1.RELEASE</version>
<relativePath />
</parent>
<groupId>io.eddumelendez.jms</groupId>
<artifactId>spring-boot-jms-sample</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>qa</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jms</artifactId>
</dependency>
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-broker</artifactId>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>