W3Cschool
恭喜您成為首批注冊用戶
獲得88經驗值獎勵
重新加載(或“熱加載”)是指在檢測到源文件發(fā)生更改時框架重新初始化類(和應用程序的一部分)。
由于 Micronaut 優(yōu)先考慮啟動時間,并且大多數(shù) Micronaut 應用程序可以在幾秒鐘內啟動,因此通??梢酝ㄟ^在進行更改時重新啟動應用程序來獲得高效的工作流程;例如,通過在 IDE 中運行測試類。
但是,為了讓您的更改自動重新加載,Micronaut 支持自動重啟和使用第三方重新加載代理。
自動重啟
在JVM上實現(xiàn)類重載的方式有很多種,各有優(yōu)缺點。以下是在不重啟 JVM 的情況下實現(xiàn)重新加載的可能方法:
鑒于現(xiàn)有解決方案存在的問題以及 JVM 中缺乏重新加載更改的內置方法,最安全和最佳的重新加載解決方案,也是 Micronaut 團隊推薦的解決方案,是通過第三方工具使用自動應用程序重啟。
Micronaut 的啟動時間很快,自動重啟會導致一個干凈的狀態(tài),而不會出現(xiàn)潛在的難以調試的問題或內存泄漏。
要使用 Maven 自動重啟應用程序,請使用 Micronaut Maven 插件(創(chuàng)建新 Maven 項目時默認包含)并運行以下命令:
使用 Micronaut Maven 插件
$ ./mvnw mn:run
每次更改類時,插件都會自動重新啟動服務器。
使用 Micronaut Gradle 插件時,可以通過 -t 標志激活 Gradle 對連續(xù)構建的支持來激活 Gradle 自動重啟:
使用 Gradle 自動重啟
./gradlew run -t
每次您對類或資源進行更改時,Gradle 都會重新編譯并重新啟動應用程序。
JRebel 是一個專有的重新加載解決方案,它涉及一個代理庫,以及復雜的 IDE 支持。 JRebel 文檔包括 IDE 集成和使用的詳細步驟。在本節(jié)中,我們將展示如何為 Maven 和 Gradle 項目安裝和配置代理。
使用 CLI
如果您使用 Micronaut CLI 創(chuàng)建項目,請?zhí)峁?nbsp;jrebel 功能以在您的項目中預配置 JRebel 重新加載。請注意,您需要安裝 JRebel 并在 gradle.properties 文件(對于 Gradle)或 pom.xml(對于 Maven)中提供代理的正確路徑。必要的步驟如下所述。
$ mn create-app my-app --features jrebel
安裝/配置 JRebel 代理
安裝 JRebel 的最簡單方法是從 JRebel 下載頁面下載“獨立”安裝包。將下載的文件解壓到方便的位置,例如 ~/bin/jrebel
安裝目錄包含一個帶有代理文件的 lib 目錄。對于基于您的操作系統(tǒng)的適當代理,請參見下表:
OS | Agent |
---|---|
Windows 64-bit JDK |
|
Windows 32-bit JDK |
|
Mac OS X 64-bit JDK |
|
Mac OS X 32-bit JDK |
|
Linux 64-bit JDK |
|
Linux 32-bit JDK |
|
記下相應代理的路徑,并將值添加到您的項目構建中。
將路徑添加到 gradle.properties(必要時創(chuàng)建文件),作為 rebelAgent 屬性。
gradle.properties
#Assuming installation path of ~/bin/jrebel/
rebelAgent= -agentpath:~/bin/jrebel/lib/libjrebel64.dylib
將適當?shù)?nbsp;JVM arg 添加到 build.gradle(如果使用 CLI 功能則不需要)
run.dependsOn(generateRebel)
if (project.hasProperty('rebelAgent')) {
run.jvmArgs += rebelAgent
}
您可以使用 ./gradlew run 啟動應用程序,它將包含代理。請參閱有關 Gradle 重新加載或 IDE 重新加載的部分以設置重新編譯。
相應地配置 Micronaut Maven 插件:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<!-- ... -->
<build>
<plugins>
<!-- ... -->
<plugin>
<groupId>io.micronaut.build</groupId>
<artifactId>micronaut-maven-plugin</artifactId>
<configuration>
<jvmArguments>
<jvmArgument>-agentpath:~/bin/jrebel/lib/jrebel6/lib/libjrebel64.dylib</jvmArgument>
</jvmArguments>
</configuration>
</plugin>
<plugin>
<groupId>org.zeroturnaround</groupId>
<artifactId>jrebel-maven-plugin</artifactId>
<version>1.1.10</version>
<executions>
<execution>
<id>generate-rebel-xml</id>
<phase>process-resources</phase>
<goals>
<goal>generate</goal>
</goals>
</execution>
</executions>
</plugin>
<!-- ... -->
</plugins>
</build>
</project>
使用 Gradle 重新編譯
Gradle 支持連續(xù)構建,讓您運行的任務將在源文件更改時重新運行。要將其與重新加載代理(如上所述配置)一起使用,請正常運行應用程序(使用代理),然后在啟用連續(xù)模式的單獨終端中運行重新編譯任務。
運行應用
$ ./gradlew run
運行重新編譯
$ ./gradlew -t classes
每次修改源文件時都會重新運行類任務,從而允許重新加載代理獲取更改。
使用 IDE 重新編譯
如果您使用不支持自動重新編譯文件更改的構建工具(如 Maven),您可以使用您的 IDE 結合重新加載代理(如上述部分中配置)重新編譯類。
不幸的是,IntelliJ 沒有適用于正在運行的應用程序的自動重建選項。但是,您可以使用 CMD-F9 (Mac) 或 CTRL-F9 (Windows/Linux) 觸發(fā)項目的“重建”。
在“項目”菜單下,選中“自動構建”選項。每當文件更改保存到磁盤時,這將觸發(fā)項目的重新編譯。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: