Gretty, Spring MVC и горячее развертывание - PullRequest
0 голосов
/ 17 мая 2018

Я изучаю Spring MVC и пытаюсь использовать его вместе с плагином Gradle и Gretty.Я успешно создал проект «Hello World», однако я не могу использовать горячее развертывание с Gretty, несмотря на установку managedClassReload=true.Я запускаю приложение, используя appRun gretty task от IntelliJ.Мой build.gradle выглядит следующим образом:

apply plugin: 'java'
apply plugin: 'application'
apply plugin: 'war'
apply from: 'https://raw.github.com/gretty-gradle-plugin/gretty/master/pluginScripts/gretty.plugin'

group = 'lukeg'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8
mainClassName = 'lukeg.LearnApplication'

repositories {
    mavenCentral()
    maven {
        url 'https://repo.spring.io/libs-snapshot'
    }
}


dependencies {
    compileOnly('org.projectlombok:lombok:+')
    compile('org.springframework:spring-webmvc:4.3.17.RELEASE')
    compile("org.aspectj:aspectjweaver:1.8.11")
    compile('org.springframework:spring-context:4.3.18.BUILD-SNAPSHOT')
    providedCompile group: 'javax.servlet', name: 'javax.servlet-api', version: '3.1.0'
}

gretty {
    httpPort = 8080
    contextPath = '/'
    servletContainer = 'tomcat9'
    //reloadOnClassChange=true
    managedClassReload=true
    loggingLevel='DEBUG'
}

Не имеет значения, использую ли я tomcat9 или jetty9 для контейнера сервлета: журналы не показывают, что обнаружены изменения в исходных файлах в проекте.Гретти.

Интересно, что когда я закомментирую строку managedClassReload=true и раскомментирую reloadOnClassChange=true, обнаруживаются изменения в исходных файлах, и проект автоматически перезагружается.

Что может быть причиной для gretty'sгорячее развертывание не работает?Springloaded не работает вместе с Spring MVC?

1 Ответ

0 голосов
/ 17 мая 2018

Прежде всего, нет необходимости зависеть от скрипта плагина, который вы собираете с github, поскольку org.gretty доступен в официальном репозитории плагинов Gradle уже некоторое время:

plugins {
  id "org.gretty" version "2.1.0"
}

Поскольку вы запускаете приложение на месте с помощью appRun , ваши изменения не будут перезагружены.
Вы должны запускать ваше приложение как war, используя appRunWar .

Это не упоминается в документации.Но в исходном коде Gretty.
Вы можете проверить код Gretty , который вызвал вашу проблему в BaseScannerManager:

if(wconfig.reloadOnClassChange) 
{
    if(managedClassReload) 
    {
        if(wconfig.inplace) // <-- your problem, you are running inplace
        {
            log.info 'file {} is in managed output of {}, servlet-container will not be restarted', f, wconfig.projectPath
        }
        else 
        {
            log.info 'file {} is in output of {}, but it runs as WAR, servlet-container will be restarted', f, wconfig.projectPath
            webAppConfigsToRestart.add(wconfig)
        }
    } 
    else 
    {
       log.info 'file {} is in output of {}, servlet-container will be restarted', f, wconfig.projectPath
       webAppConfigsToRestart.add(wconfig)
    }
}
...