2015-01-29 2 views
21

Я играю Сюр весна Загрузочный руководство по началу работы, но автоматическая настройка не выполняется и я получаю:Spring Загрузочный GS: ComponentScan и ClassNotFoundException для ConnectionFactory

java.lang.ClassNotFoundException: javax.jms.ConnectionFactory 

кажется, что это связано с расположением класса приложений , Где он должен быть расположен? В пакете верхнего уровня (src/main/java) или в конкретном пакете?

+0

Подтвердили ли вы всю зависимость? –

ответ

-1

Ваша конфигурация должна выглядит, как это и Application.java должны быть в корне вами пакеты Eg/SRC/главная/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> 
+0

Ответ был обновлен –

72

Класс 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. 
+0

Ваш ответ решает проблему, но было бы полезно знать, почему это «не очень хорошая идея», поскольку мне не важно, где находится класс Application. –

+2

Сканирование компонентов выглядит в пакете, где находится ваш основной класс приложения, и все его подпакеты. Если вы поместите его в пакет по умолчанию, сканируется каждый пакет в пути к классам. В лучшем случае это будет пустой тратой времени. В худшем случае это приведет к тому, что ваше приложение не начнет работать, поскольку оно найдет компоненты, которых он не должен был найти. –

+0

. Отходы времени и слишком многого будут по-прежнему лучше, чем [ClassNotFoundException], которые, похоже, ничего не нашли. Тем более, что я перешел к документу Spring о том, где разместить класс Application, и буквально говорит: «Мы рекомендуем вам найти основной класс приложения в корневом пакете» (http://docs.spring.io/spring-boot/docs /current/reference/html/using-boot-structuring-your-code.html). Я что-то упускаю или это намеренно вводит в заблуждение? –

0

Вам нужен основной класс, который должен находиться внутри упаковки. Поскольку аннотация для загрузки в Spring @SpringBootApplication будет искать пакет для сканирования при запуске приложения.

Так что убедитесь, что в вашем файле основного класса есть инструкция пакета. Вот и все.

0

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

Пример программы (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); 

    } 

} 
+0

. Вы можете форматировать код лучше, добавив четыре пробела перед каждой строкой. – ailnlv

+0

@ailnlv, Спасибо, T-Heron сделал это, будет держать это в виду в будущем –

2

Не помещайте класса Application Bootup в пакете по умолчанию. Это решит проблему.

Рабочий код:

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);   

    } 
}