2016-12-07 8 views
0

Я только что начал новый проект с Spring Boot, с которым я пытаюсь справиться. Я использую Spring Tool Suite, который создал для меня проект Spring Boot, и загрузил некоторые зависимости, которые, как я знаю, мне понадобятся дальше (в частности, Spring Batch и Spring Data)ClassNotFoundException на Spring JavaMailSenderImpl в тесте JUnit с Spring Boot

Это мой pom.xml:

<parent> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-parent</artifactId> 
    <version>1.4.2.RELEASE</version> 
    <relativePath/> <!-- lookup parent from repository --> 
</parent> 

<dependencies> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-batch</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-data-jpa</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-mail</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-test</artifactId> 
     <scope>test</scope> 
    </dependency> 

    <!-- JDBC driver --> 
    <dependency> 
     <groupId>com.microsoft.sqlserver</groupId> 
     <artifactId>mssql-jdbc</artifactId> 
     <version>6.1.0.jre8</version> 
    </dependency> 
</dependencies> 

Я читал справочную документацию и знать, что я буду нуждаться в почту в какой-то момент вниз по линии, поэтому я добавил это к моему application.properties файл:

spring.mail.host=my.mail.host 

затем я попытался создайте приложение с помощью mvn package, но в тестах он ошибся. Тест состоит из следующих действий:

package its.idcard.batch; 

import org.junit.Test; 
import org.junit.runner.RunWith; 
import org.springframework.boot.test.context.SpringBootTest; 
import org.springframework.test.context.junit4.SpringRunner; 

@RunWith(SpringRunner.class) 
@SpringBootTest 
public class IdCardBatchApplicationTests { 

    @Test 
    public void contextLoads() { 
    } 

} 

Таким образом, все это делает пытается загрузить контекст приложения, но он терпит неудачу с ClassNotFoundException на org.springframework.mail.javamail.JavaMailSenderImpl.

Я знаю, что это проблема только с тестом, так как после добавления небольшого количества данных Spring Data и пропусков тестов в maven мое приложение-заглушка работает как ожидалось (и, глядя в сгенерированную банку, я вижу эту пружину -context-support-4.3.4-RELEASE.jar присутствует, содержащий класс-нарушитель), поэтому он, похоже, является проблемой класса для тестов, но я в тупике. Если я прокомментирую строку spring.mail.host в файле свойств, тест проходит без проблем.

Любые идеи были бы с благодарностью оценены.

+0

Вам нужно будет добавить зависимость 'javax.mail'. Попробуйте использовать этот \t \t \t javax.mail \t \t \t почта \t \t \t 1.4.7 \t \t

+0

Это уже включен в 'пружинно-загрузочный стартер-mail' зависимость поэтому нет необходимости добавлять его снова. –

+0

Обратите внимание, что [текущая версия JavaMail - 1.5.6] (https://java.net/projects/javamail/pages/Home). –

ответ

0

Я думаю, что проблема, с которой я только что сталкивалась, оказалась поврежденными файлами jar в моем репозитории maven. Я решил вручную создать bean-компонент MailSender в моем классе конфигурации, чтобы узнать, помогло ли это, но Eclipse помещал класс, который не был найден, хотя содержащая его банку была в зависимостях maven. Затем я попробовал mvn compile из командной строки, что дало мне более полезную ошибку, указав поврежденные банки, поэтому я удалил оскорбительные баночки из своего локального репозитория и снова загрузил их maven, и теперь я больше не получаю ошибку в конфигурации выше.

Надеюсь, это поможет другим.

Смежные вопросы