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