Java обнаруживает, что код был заменен
Странный вопрос - но мне интересно, как бы я написал код, чтобы сказать: "Были ли какие-либо классы перегружены intellij с тех пор, как я последний раз проверял"
Зачем?
По злым историческим причинам - запуск Springcontext занимает 2-3 минуты, что означает, что если вы просто хотите запустить один тест, это 2-3 минуты времени ожидания. Если вы человек TDD, который хочет написать немного, запустить, написать немного, запустить - это нереально. Ускорение загрузки пружинного контекста, очевидно, является идеальным, но намного больше того времени, которое у меня есть, так как все это беспорядок - я думаю просто сделать тест junit, который представляет собой бесконечный цикл:
while true
try {run the actual test;show success} catch {show error}
wait until code is hot swapped
таким образом, большую часть времени кто-то может просто написать немного кода, нажать клавишу сборки - и он сразу же запустится снова без перезагрузки контекста - с задержкой на 2-3 минуты до менее чем второй.
1 ответ
Взгляните на HotswapAgent, неограниченный класс времени выполнения Java и переопределение ресурсов.
Скачайте dcevm и последнюю версию hotswap-agent-core.jar и запустите ваше приложение с java --javaagent:c:\java\hotswap-agent-core.jar YourApp
,
Добавьте зависимость HotswapAgent:
<dependency>
<groupId>org.hotswapagent</groupId>
<artifactId>hotswap-agent-core</artifactId>
<version>1.3.0</version>
<scope>provided</scope>
</dependency>
Вам также понадобятся плагины Агента Hotswap для перезагрузки Spring и других бинов / кешей:
<dependency>
<groupId>org.hotswapagent</groupId>
<artifactId>hotswap-agent-plugins</artifactId>
<version>1.3.0</version>
<type>pom</type>
</dependency>
Напишите свой класс плагина:
@Plugin(name = "TriggerHotswapPlugin")
public class TriggerHotswapPlugin {
@OnClassLoadEvent(classNameRegexp = ".*", events = LoadEvent.REDEFINE)
public static void onAnyReload() {
.. synchronization mechanism with your class .. ;
}
@OnResourceFileEvent(path = "/", filter = ".*.resource")
public void onResourceChanged() {
.. synchronization mechanism with your class .. ;
}
}
Создать hotswap-agent.properties
pluginPackages=your.plugin.package
В качестве альтернативы вы можете создать простой javaagent для запуска hotswap, но вам все равно нужен полный hotswap java classess, почему бы не написать собственный плагин hotswap agent.