Hotswap 26.02
Hotswap-työkalu ottaa käännettyjen luokkien muutokset käyttöön käynnissä olevassa sovelluksessa ilman uudelleenkäynnistystä. Sovelluksen tila säilyy päivitysten välillä. Työkalu määritetään webforJ-koontiliitännäisen asetuksissa, ja se liitetään sovellukseen, kun koonti käynnistää sen. Suorituskomento pysyy samana, eikä projektiin tarvitse lisätä riippuvuutta.
Tuettuja työkaluja on kaksi:
- HotswapAgent on avoimen lähdekoodin työkalu. Koontiliitännäinen lataa agentin ensimmäisellä suorituskerralla ja tallentaa sen välimuistiin.
- JRebel on kaupallinen tuote. Se vaatii oman asennuksen ja lisenssin.
Määritä täsmälleen yksi työkalu. Jos koonti nimeää molemmat, se epäonnistuu ja ilmoittaa virheessä molempien nimet.
HotswapAgent
Tyhjä elementti on täydellinen määritys:
- Maven
- Gradle
<plugin>
<groupId>com.webforj</groupId>
<artifactId>webforj-maven-plugin</artifactId>
<extensions>true</extensions>
<configuration>
<hotswap>
<hotswapAgent/>
</hotswap>
</configuration>
</plugin>
webforj {
hotswap {
hotswapAgent {}
}
}
Liittämistä voi tarkentaa kahdella asetuksella:
| Asetus | Kuvaus |
|---|---|
version | Tietty agenttiversio liitännäisen valitseman version sijaan. |
path | Levylle tallennettu agentti-JAR, jota käytetään suoraan ilman lataamista. Sopii koneille, joilla ei ole verkkoyhteyttä, tai mukautetulle agenttikoosteelle. |
- Maven
- Gradle
<hotswap>
<hotswapAgent>
<path>/path/to/hotswap-agent.jar</path>
</hotswapAgent>
</hotswap>
webforj {
hotswap {
hotswapAgent {
path = file('/path/to/hotswap-agent.jar')
}
}
}
Luokan rakenteen muutokset
Metodin rungon muokkaukset otetaan käyttöön kaikissa Java-virtuaalikoneissa. Luokan rakenteen muutokset, kuten uuden kentän tai metodin lisääminen, vaativat virtuaalikoneen, joka hyväksyy asetuksen -XX:+AllowEnhancedClassRedefinition. Tällaisen ominaisuuden tarjoaa JetBrains Runtime. Koonti tunnistaa ominaisuuden ja ottaa sen käyttöön. Katso JetBrains Runtimen asennusohjeet kohdasta Edellytykset.
Ilman tätä ominaisuutta metodin rungon muokkaukset otetaan silti käyttöön, mutta luokan rakenteen muutos ei tule voimaan käynnissä olevassa sovelluksessa ennen uudelleenkäynnistystä. Koontiloki tulostaa vaatimuksen nimeävän varoituksen, ja selain näyttää ilmoituksen kerran.
JRebel
JRebel on kaupallinen tuote, jonka lisensoi sen toimittaja. webforJ ei toimita sitä eikä lataa sitä, eikä se osallistu lisensointiin. Koonti lukee määritetyn polun, tarkistaa, että tiedosto on olemassa, ja liittää sen muuttamattomana.
Osoita määrityksessä JRebel-asennuksesi agenttiin, joka voi olla natiivikirjasto tai JAR-tiedosto:
- Maven
- Gradle
<hotswap>
<jrebel>
<path>/path/to/libjrebel64.dylib</path>
</jrebel>
</hotswap>
webforj {
hotswap {
jrebel {
path = file('/path/to/libjrebel64.dylib')
}
}
}
Polku on pakollinen. Jos koonti valitsee JRebelin ilman polkua, se epäonnistuu ja ilmoittaa virheessä puuttuvan asetuksen.
JRebelin avulla kaikki luokkamuutokset, myös rakenteen muutokset, otetaan käyttöön kaikissa Java-ajoympäristöissä.
Valinta komentoriviltä
Ominaisuus webforj.hotswap ohittaa koontitiedoston asetuksen yksittäisellä suorituskerralla. Sallitut arvot ovat hotswapAgent, jrebel ja off. Mikä tahansa muu arvo aiheuttaa koonnin epäonnistumisen, ja virheessä luetellaan sallitut arvot. jrebel-arvon valitseminen edellyttää silti agenttipolun määrittämistä asetuksissa.
- Maven
- Gradle
mvn -Dwebforj.hotswap=off
mvn -Dwebforj.hotswap=hotswapAgent
./gradlew bootRun -Pwebforj.hotswap=off
./gradlew bootRun -Pwebforj.hotswap=hotswapAgent
Muutoksen käyttöönotto
Käännä muutos, niin se tulee voimaan käynnissä olevassa sovelluksessa. Tallenna tiedosto IDE:ssä, joka kääntää tallennuksen yhteydessä, tai suorita käännös toisessa pääteikkunassa.
Kun kaikki muuttuneet luokat kuuluvat nykyisen sivun näyttämään sisältöön, kyseinen osa rakennetaan uudelleen paikan päällä ja sovelluksen tila säilyy. Muussa tapauksessa koko sivu ladataan uudelleen: näin käy sovelluksissa, joissa ei ole reititystä, kun luokka ei kuulu näytettyihin reitteihin tai kun uudelleenrakennusta ei voida tehdä. Yksi käännetty muutos tuottaa selaimessa yhden päivityksen.
Latauksen nopeuttaminen IntelliJ IDEA:ssa
IntelliJ IDEA kääntää tallennuksen yhteydessä vain, kun automaattiset koonnit ovat käytössä, ja se odottaa ennen jokaista vaihetta. Lyhennä odotusaikoja, jotta muutos tulee nopeammin voimaan käynnissä olevassa sovelluksessa.
Automaattisten koontien käyttöönotto
Avaa asetukset ja ota käyttöön seuraavat valinnat:
- Valitse Build, Execution, Deployment > Compiler ja ota käyttöön Build project automatically.
- Valitse Advanced Settings > Compiler ja ota käyttöön Allow auto-make to start even if developed application is currently running.
- Valitse Appearance & Behavior > System Settings ja ota Autosave-kohdassa käyttöön Save files if the IDE is idle for. Aseta arvoksi
1sekunti.
- Windows and Linux
- macOS
Paina Ctrl+ALt+S tai valitse File > Settings.
Paina Cmd++ tai valitse IntelliJ IDEA > Settings.
Koontiviiveiden lyhentäminen
Aseta seuraavien rekisteriavainten arvoksi 0:
| Avain | Kuvaus |
|---|---|
compiler.automake.trigger.delay | Tiedostomuutoksen ja koonnin käynnistymisen välinen viive. |
compiler.automake.build.while.idle.timeout | Joutoaika ennen koonnin käynnistymistä. |
compiler.automake.postpone.when.idle.less.than | Joutoaika, jota lyhyemmän ajan jälkeen IntelliJ IDEA lykkää koontia. |
- Windows and Linux
- macOS
- Avaa Find Action painamalla Ctrl+Shift+A.
- Kirjoita
Registry...ja valitse se.
- Avaa Find Action painamalla Cmd+Shift+A.
- Kirjoita
Registry...ja valitse se.
Voit myös avata Search Everywhere -haun painamalla Shift kahdesti, siirtyä Actions-välilehdelle ja kirjoittaa Registry.
Kirjoita Registry-valintaikkunassa avaimen nimi suodattaaksesi luetteloa ja aseta sen arvoksi 0.
Rekisterimerkinnät ovat IntelliJ IDEA:n edistyneitä, ei-tuettuja asetuksia. Voit palauttaa ne valitsemalla Registry-valintaikkunassa Restore Defaults.
