Siirry pääsisältöön

Hotswap 26.02

Avaa ChatGPT:ssä

Hotswap-työkalu soveltaa käännettyjä luokkamuutoksia käynnissä olevaan sovellukseen ilman uudelleenkäynnistystä. Sovellus säilyttää tilansa päivitysten välillä. Työkalun nimi on määritelty webforJ build plugin -konfiguraatiossa, ja se liitetään, kun build aloittaa sovelluksen. Aja-komento pysyy ennallaan, eikä projekti julista siihen riippuvuutta.

Kaksi työkalua tuetaan:

  • HotswapAgent on avoimen lähdekoodin. Build-plugin lataa agentin ensimmäisellä suorituskerralla ja välimuistaa sen.
  • JRebel on kaupallinen tuote. Se vaatii oman asennuksen ja lisenssin.

Määritä tarkalleen yksi. Build, joka nimeää molemmat, epäonnistuu virheellä, joka nimeää molemmat.

HotswapAgent

Tyhjällä elementillä on täydellinen konfiguraatio:

pom.xml
<plugin>
<groupId>com.webforj</groupId>
<artifactId>webforj-maven-plugin</artifactId>
<extensions>true</extensions>
<configuration>
<hotswap>
<hotswapAgent/>
</hotswap>
</configuration>
</plugin>

Kaksi vaihtoehtoa tarkentaa liittämistä:

VaihtoehtoKuvaus
versionErityinen agentin versio sen sijaan, että plogiini valitsisi.
pathAgentin jar- tiedosto levyllä, jota käytetään suoraan ilman latausta. Koneille, joilla ei ole verkkoyhteyttä tai mukautettujen agenttirakennusten käyttöön.
pom.xml
<hotswap>
<hotswapAgent>
<path>/path/to/hotswap-agent.jar</path>
</hotswapAgent>
</hotswap>

Luokkastruktuurin muutokset

Metodin kehykseen tehtävät muokkaukset pätevät kaikilla Java-virtuaalikoneilla. Luokan rakenteeseen liittyvät muutokset, kuten uusi kenttä tai uusi metodi, vaativat virtuaalikoneen, joka hyväksyy -XX:+AllowEnhancedClassRedefinition -vaihtoehdon, jonka JetBrains Runtime tarjoaa. Build havaitsee kyvykkyyden ja ottaa sen käyttöön. Katso Prerequisites asentaaksesi JetBrains Runtime.

Ilman kyvykkyyttä metodin kehykseen tehdyt muokkaukset pätevät silti, ja luokan rakenteen muutos ei vaikuta käynnissä olevaan sovellukseen ennen uudelleenkäynnistystä. Build-lokissa tulostuu varoitus, joka nimeää vaatimuksen, ja selain näyttää ilmoituksen kerran.

JRebel

JRebel on kaupallinen tuote, jonka myyjä myöntää lisenssin. webforJ ei sitä toimita, ei lataa sitä, eikä osallistu sen lisensointiin. Build lukee määritetyn polun, tarkistaa, että tiedosto on olemassa ja liittää sen muuttumattomana.

Osoita konfiguraatio JRebel-asennuksesi agenttiin, natiivikirjastoon tai jar-tiedostoon:

pom.xml
<hotswap>
<jrebel>
<path>/path/to/libjrebel64.dylib</path>
</jrebel>
</hotswap>

Polku on pakollinen. Build, joka valitsee JRebelin ilman sitä, epäonnistuu virheellä, joka nimeää puuttuvan asetuksen.

JRebelin kanssa kaikki luokkamuutokset, mukaan lukien rakenteen muutokset, pätevät kaikilla Java-suoritusympäristöillä.

Komentorivivalinta

webforj.hotswap -ominaisuus ylikirjoittaa build-tiedoston yhden suorituskerran ajaksi. Hyväksytyt arvot ovat hotswapAgent, jrebel ja off. Mikä tahansa muu arvo epäonnistaa buildin virheellä, joka luettelee voimassa olevat. JRebelin valitseminen vaatii silti agenttipolun konfiguraatiossa.

mvn -Dwebforj.hotswap=off
mvn -Dwebforj.hotswap=hotswapAgent

Muutoksen soveltaminen

Käännä muutos ja se saavuttaa käynnissä olevan sovelluksen. Tallenna IDE:ssä, joka kääntää tallennettaessa, tai suorita käännös toisessa terminaalissa.

Kun jokainen muutettu luokka kuuluu siihen, mitä nykyinen sivu renderoi, kyseinen osa rakennetaan uudelleen paikallaan ja sovelluksen tila pysyy. Muuten sivu lataa täydellisesti: sovelluksessa ilman reititystä, luokassa, joka on renderoitujen reittien ulkopuolella, tai kun uudelleenrakennusta ei voida toteuttaa. Yksi käännetty muutos tuottaa yhden päivityksen selaimessa.