Я створив простий модульний тест, але IntelliJ неправильно виділяє його червоним кольором. позначаючи це як помилку
Ні квасолі?
Як ви бачите нижче, він проходить тест? Так воно повинно бути автоматичним?
Я створив простий модульний тест, але IntelliJ неправильно виділяє його червоним кольором. позначаючи це як помилку
Ні квасолі?
Як ви бачите нижче, він проходить тест? Так воно повинно бути автоматичним?
Відповіді:
У мене була ця сама проблема при створенні програми Spring Boot, використовуючи їх @SpringBootApplication
анотацію. Ця анотація являє собою @Configuration
, @EnableAutoConfiguration
і @ComponentScan
згідно з джерелом посилання .
Як і очікувалося, нова анотація спрацювала належним чином, і моя програма працювала безперебійно, але Intellij продовжував скаржитися на невиконані @Autowire
залежності. Як тільки я перейшов до використання @Configuration
, @EnableAutoConfiguration
і @ComponentScan
окремо помилки припинилися. Здається, Intellij 14.0.3 (і, швидше за все, і більш ранні версії) ще не налаштований для розпізнавання @SpringBootApplication
примітки.
Поки, якщо помилки вас так сильно турбують, поверніться до цих трьох окремих приміток. В іншому випадку ігноруйте Intellij ... ваша роздільна здатність налаштована правильно, оскільки ваш тест проходить.
Завжди пам'ятай...
Людина завжди більша за машину.
@SpringBootApplication
я отримував цю помилку. Я дотримувався поради @ Jaõs Matos, використовуючи scanBasePackages
параметр для @SpringBootApplication
та вказав пробіли пакунків / імен, які слід сканувати.
Додайте весняну примітку @Repository
над класом сховища.
Я знаю, що це має працювати без цієї примітки. Але якщо додати це, IntelliJ не покаже помилки.
@Repository
public interface YourRepository ...
...
Якщо ви використовуєте Spring Data з розширенням Repository
класу, це будуть конфліктні повідомлення. Тоді ви повинні вказати на чіткі сторінки.
import org.springframework.data.repository.Repository;
...
@org.springframework.stereotype.Repository
public interface YourRepository extends Repository<YourClass, Long> {
...
}
А далі ви можете автоматично з'єднати своє сховище без помилок.
@Autowired
YourRepository yourRepository;
Це, мабуть, не дуже вдале рішення (я думаю, ви намагаєтесь зареєструвати сховище двічі). Але працюй для мене і не показуй помилок.
Можливо, у новій версії IntelliJ можна виправити: https://youtrack.jetbrains.com/issue/IDEA-137023
Моя версія IntelliJ IDEA Ultimate (2016.3.4 Build 163), схоже, підтримує це. Хитрість полягає в тому, що вам потрібно увімкнути плагін Spring Data.
Іноді вам потрібно вказати, де @ComponentScan повинен шукати компоненти. Це можна зробити, передавши пакети як параметр цієї анотації, наприклад:
@ComponentScan(basePackages={"path.to.my.components","path.to.my.othercomponents"})
Однак, як уже згадувалося, анотація @SpringBootApplication замінює @ComponentScan, отже, у таких випадках потрібно робити те саме:
@SpringBootApplication(scanBasePackages={"path.to.my.components","path.to.my.othercomponents"})
Принаймні в моєму випадку Intellij перестав скаржитися.
@SpringBootApplication(scanBasePackages={"com.a.b, com.a.c"})
і хоча програма працювала нормально, Intellij це не сподобалось. Зміна на @SpringBootApplication(scanBasePackages={"com.a.b", "com.a.c"})
фіксовану для мене!
Я завжди вирішую цю проблему, виконуючи наступні дії. Налаштування> Інспекції> Spring Core> Код, ніж ви переходите від помилки до попередження про параметр суворості
Я використовую Spring-boot 2.0 та intellij 2018.1.1 ultimate edition, і я зіткнувся з тим же питанням.
Я вирішив, розмістивши @EnableAutoConfiguration в основному класі додатків
@SpringBootApplication
@EnableAutoConfiguration
class App{
/**/
}
Redundant declaration: @SpringBootApplication already applies @EnableAutoConfiguration
¯ \ _ (ツ) _ / ¯
Введення @Component
або @configuration
в файлі конфігурації боб , здається, працює, тобто що - щось на кшталт:
@Configuration
public class MyApplicationContext {
@Bean
public DirectoryScanner scanner() {
return new WatchServiceDirectoryScanner("/tmp/myDir");
}
}
@Component
public class MyApplicationContext {
@Bean
public DirectoryScanner scanner() {
return new WatchServiceDirectoryScanner("/tmp/myDir");
}
}
Якщо ви не хочете вносити будь-які зміни в код, просто щоб зробити ваш IDE щасливим. Я вирішив це, додавши до компонента Spring всі компоненти.
Поки ваші тести проходять, ви добрі, натиснувши alt + enter
курсор на помилку і всередині підменю першого елемента ви знайдете, що Disable Inspection
виберіть
У мене була подібна проблема у програмі Spring Boot. У додатку використовується Feign (HTTP-клієнт, який синтезує запити з анотованих інтерфейсів). Маючи інтерфейс з SomeClient
анотацією @FeignClient
, Feign генерує клас проксі-сервера, що реалізує цей інтерфейс. Коли якийсь компонент Spring намагається автоматично надати з'єднання типу bean SomeClient
, Idea скаржиться на відсутність бобів типуSomeClient
знайдено оскільки в проекті насправді не існує реального класу, і Idea не навчена розуміти@FeignClient
анотацію жодним чином.
Рішення: анотувати інтерфейс SomeClient
з @Component
. (У нашому випадку ми не використовуємо @FeignClient
анотацію SomeClient
безпосередньо, а скоріше використовуємо метаанотацію, @OurProjectFeignClient
яку анотуємо , @FeignClient
а також додавання @Component
анотації до неї працює.)
@Component
до інтерфейсу вирішує проблему. Але я думаю, що це не правильний спосіб ... На мою думку, це помилка в IntelliJ IDEA або бути не таким вже й жорстким IntelliJ IDEA не готовий до нових версій Feign. Це працює без більш @Component
ерлі-файльних версій (де замість цього @FeignClient
було анотацію - можливо, це і є причиною проблеми). Ви знайшли будь-які інші деталі (можливо, квиток про помилку) для цього? org.springframework.cloud.netflix.feign
org.springframework.cloud.openfeign
@Component
) @FeignClient
від org.springframework.cloud.netflix.feign
пакета.
І остання важлива інформація - додайте ComponentScan
так, щоб програма знала про речі, які їй потрібні. У випадку цього питання це не актуально. Однак якщо взагалі нічого @autowiring
не виконується, це, швидше за все, ваше рішення.
@Configuration
@ComponentScan(basePackages = {
"some_package",
})
public class someService {
Що вам потрібно зробити, це додати
@ComponentScan("package/include/your/annotation/component")
в AppConfiguration.java
.
Оскільки я думаю AppConfiguraion.java
, що пакет вашого пакета глибший, ніж пакунок компонента (@Service, @Component ...),
таких як "package/include/your/annotation/component/deeper/config"
.
У моїй заявці була схожа проблема. Коли я додав анотації, зникли невірні маркування.
@ContextConfiguration(classes = {...})
Я використовую цю примітку, щоб приховати цю помилку, коли вона з’являється в IntelliJ v.14:
@SuppressWarnings("SpringJavaAutowiringInspection")
@SuppressWarnings("SpringJavaInjectionPointsAutowiringInspection")
Для мене рішенням було розміщення @EnableAutoConfiguration
в класі Application під @SpringBootApplication
його підкресленням, оскільки його надмірність. Видаліть його і проголосуйте всі попередження щодо відсутніх бобів! Дурна весна ...
Моє рішення цієї проблеми в моєму додатку для весняного завантаження полягало в тому, щоб відкрити контекст весняного додатка та додати клас для відсутнього автопровідного боба вручну!
(доступ через меню Структура проекту або вікно інструмента весни ... редагувати "Весняний контекст програми")
Тож замість SpringApplicationContext, що містить мою пружинну конфігурацію ExampleApplication, він також містить відсутніх Bean:
SpringApplicationContext:
et voilà: Повідомлення про помилку зникло!
Здається, це все ще є помилкою в останній IntelliJ і пов'язане з можливою проблемою кешування?
Якщо ви додаєте анотацію @Repository як вищевказану mk321, збережіть, потім видаліть примітку та збережіть її знову, це усуне проблему.
Мені просто довелося використовувати @EnableAutoConfiguration для його вирішення, однак ця помилка не мала функціонального впливу.
Це можна вирішити, помістивши @EnableAutoConfiguration на основний клас додатка для завантаження.
Іноді - в моєму випадку це - причина - неправильний імпорт. Я випадково імпортував
import org.jvnet.hk2.annotations.Service
замість
import org.springframework.stereotype.Service
сліпо прийнявши перший вибір у запропонованому Ідеєю імпорті. Забрав мене кілька хвилин у перший раз, коли це сталося :-)
Дивно, але проект, орієнтований на Feign, який успішно працював із Eclipse, не міг працювати в InteliJ. Коли запустив програму, InteliJ поскаржився на клієнта Feign, який я намагався ввести в рівень serviceImpl, кажучи: польовий personRestClient (мій клієнт Feign) у ... вимагав типу bean ... Подумайте про те, щоб у своїй конфігурації визначити тип "....".
Я даремно даремно намагався зрозуміти, що не так. Я знайшов рішення (для InteliJ), яке я не повністю розумію:
Або виберіть Eclipse :)
Використовуйте @AutoConfigureMockMvc для тестового класу.
просто, ви повинні зробити 2 кроки
==>> change @Autowired to @Resource
IntelliJ IDEA Ultimate
Додайте свій основний клас до контексту Spring IntelliJ Spring Application, наприклад Application.java
File
-> Project Structure..
ліва сторона: Налаштування проекту -> Модулі
права сторона: знайдіть у вашій структурі пакета
Spring
і додайте+
Application.java