Я пытаюсь перезапустить работу с Spring Boot DevTools. Я следовал приведенным здесь инструкциям: https://docs.spring.io/spring-boot/docs/current/reference/html/using-boot-devtools.html
Я использую gradle и включил это в свой файл build.gradle:
bootJar {
excludeDevtools = false
}
Я создаю файл jar и запускаю файл jar:
java -jar app.jar
Я могу подключиться к работающему приложению через Intellij. Когда я вношу изменения, я вижу в консоли Intellij, что обновленные классы загружаются в запущенный процесс. А в логах запущенного процесса вижу попытки перезапуска процесса. Однако процесс завершается и выдает этот журнал:
org.springframework.beans.factory.BeanDefinitionStoreException: не удалось проанализировать класс конфигурации [com.example.BootApplication]; вложенным исключением является java.io.FileNotFoundException: ресурс пути к классу [com/example/ExampleService.class] не может быть открыт, поскольку он не существует.
ExampleService — это класс, который я модифицировал.
Я попытался погуглить, черт возьми, но ничего не нашел. Я просмотрел множество руководств в Интернете, но ничего не нашел.
Кто-нибудь сталкивался с этим или что-то, что я могу попробовать, был бы очень признателен.
@RandyCasburn спасибо! Я только что попробовал это с gradle bootRun, и он отлично работает, как вы предлагаете. Но из приведенной выше документации кажется довольно очевидным, что он должен работать с исполняемым файлом jar, включая фрагмент, который я предоставил выше.
Я не смотрел на документы раньше, но только что сделал. Вы должны снова посмотреть на первую «листовую» ноту. В нем очень четко указано, что вы запускаете свое приложение как упакованное приложение с java -jar, поэтому инструменты отключены.
Проблема основана на том, как работает компиляция файла. Когда вы компилируете файл, он сначала удаляет уже скомпилированный файл, а затем добавляет новый. Во время этого процесса наблюдатель за файловой системой рассматривает его как два разных обновления (удаление файла и добавление нового файла), если время опроса слишком мало. И удаление файла вызывает удаление файла из удаленного приложения и пытается перезапустить приложение без файла, который вы изменили, и поэтому вы получаете эту ошибку.
Я столкнулся с аналогичной проблемой, но решил ее, добавив следующее в application.properties
spring.devtools.restart.pollInterval=10s
Вы можете изменить pollInterval, который вам подходит
Это сделало трюк! Я принял этот ответ, поскольку он решил мою проблему.
Почти наверняка вы должны использовать плагин Gradle для работы конкретных функций загрузки:
gradle bootRun