es gibt verschiedene ansätze sein programm-code upzudaten ... jedoch sollte man mindestens eine bereits implementieren BEVOR man sein programm verteilt ... ansonsten muss nachträglich vom user selbst gepatcht werden ...
ich denke sehr verbreitet sind launcher / loader / what ever man sie nennen möchte ...
ich selbst verwende bei meinen projekten auch einne der dafür zuständig ist den haupt-code sowie alle module zu checken und auf den neuesten stand zubringen bevor das haupt-system gestartet wird ...
allerdings besitzt mein launcher im gegensatz zu vielen anderen auch die fähigkeit sich selbst upzudaten ... das findet man so eher seltener ...
dann gibt es noch die variante den code des launcher quasi in die haupt-app mit reinzupacken ... also beim start gucken ob man selbst aktuell ist , wenn nicht > patchen und dann im restlichen verlauf ob alle programm-module aktuell sind ...
die idee ist die gleiche wie die erste ... jedoch verschweigt man den launcher-code in dem man alles in ein file packt
zusätzlich würden mir noch manuelle-patcher einfallen ... in dem sinne nur ein überschreiben der programm-daten während das programm selbst nicht aktiv ist ... ob man dies nun selbst macht oder ein tool schreibt kommt auf die komplexität an ...
grundsätzlich gilt aber : der launcher selbst ... also das jar was zu erst gestartet wird kann sich so selbst nur updaten in dem es temporär ein zweites von sich unabhängiges self-patcher-programm startet , sich selbst terminiert ... und durch den patcher die neue version gestartet wird ...