У меня есть несколько модулей Maven с такой структурой:
app-parent
-------app-library (Hibernate data entities layer)
-------app-main (contains app-library as dependency), Spring Boot web application.
Простые файлы pom.xml для этих папок:
- приложение-родитель / pom.xml
<modules>
<module>app-library</module>
<module>app-main</module>
</modules>
<packaging>pom</packaging>
<name>app-parent</name>
- приложение-библиотека / pom.xml
<parent>
<groupId>test</groupId>
<artifactId>app-parent</artifactId>
<version>1.0.0</version>
</parent>
<dependencies>
.... Some libraries here ....
</dependencies>
- приложение магистральный / pom.xml
<parent>
<groupId>test</groupId>
<artifactId>app-parent</artifactId>
<version>1.0.0</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>petascope-core</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
В NetBeans 8.2 и Spring Boot версии 1.5.2 я использовал Spring Devtools для автоматической перезагрузки измененного файла классов Java (~ несколько секунд) вместо холодного перезапуска (> 10 секунд).
В папке app-main я запускаю эту команду для настройки WebApplication, которая позволяет NetBeans подключать отладчик к порту 5005:
mvn spring-boot:run -Drun.jvmArguments="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005"
Кроме того, в application.properties app-main / src / main / resources я добавил эти часы, чтобы Spring Devtools обнаружил изменение из библиотеки приложений
spring.devtools.restart.additional-paths=../app-library
Итак, всякий раз, когда я изменяю один java-файл в app-main или app-library, я вижу из терминала, что Spring DevTool выполняет перезагрузку за несколько секунд.
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v1.5.2.RELEASE)
INFO [08:57:20] ApplicationMain@48: Starting ApplicationMain on localhost.localdomain with PID 19645 (/home/rasdaman/rasdaman_community/build/applications/petascope/target/petascope_main/classes started by rasdaman in /home/rasdaman/rasdaman_community/rasdaman/applications/petascope/petascope_main)
DEBUG [08:57:20] ApplicationMain@51: Running with Spring Boot v1.5.2.RELEASE, Spring v4.3.7.RELEASE
INFO [08:57:20] ApplicationMain@637: No active profile set, falling back to default profiles: default
[2018-05-01 08:57:22.341] - 19645 INFO [restartedMain] --- org.apache.catalina.core.StandardService: Starting service Tomcat
[2018-05-01 08:57:22.341] - 19645 INFO [restartedMain] --- org.apache.catalina.core.StandardEngine: Starting Servlet Engine: Apache Tomcat/8.5.11
[2018-05-01 08:57:22.361] - 19645 INFO [localhost-startStop-1] --- org.apache.catalina.core.ContainerBase.[Tomcat].[localhost].[/rasdaman]: Initializing Spring embedded WebApplicationContext
INFO [08:57:24] ApplicationMain@57: Started ApplicationMain in 3.612 seconds (JVM running for 84.418)
Проблема заключается в некоторых базовых изменениях в методе библиотеки приложений. Spring DevTools может обнаружить файл, который был сохранен, и перезагрузить его, но из приложения app-main, где вызван этот метод, вывод остается тем же, например:
app-library
public class Service {
public String returnValue() {
// return "Value before Spring DevTools reload.";
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
// After app-main was set up from Maven command lines, I changed this line here and saved it to notice Spring DevTool to reload in the console.
return "Value after Spring DevTools reload."
}
}
app-main
public class TestService {
public TestService() {
Service service = new Service();
// !!!!!!!!!!!!!!!!!!!
// It can only print "Value before Spring DevTools reload."
// even though the Service file has been changed to return different value and Spring DevTools reloaded.
System.out.println(service.returnValue());
}
}
С этой проблемой я не могу просто изменить приложение-библиотеку и ожидать, что изменения будут применены в app-main. Вместо этого мне нужно остановить командную строку Maven, затем в NetBeans щелкните app-main и выберите Построить с зависимостями , затем снова запустите командную строку Maven, чтобы настроить это веб-приложение с холодным запуском (всего: ~ 1 минута).
Что я могу сделать, чтобы Spring DevTools мог применить изменения из библиотеки приложений к главной приложения сразу после сохранения файлов в библиотеке приложений? Это поможет сократить время ожидания от NetBeans «Построить с зависимостями».