Nu har det gått drygt fyra månader sedan Java 9 (eller Java SE 9 som är det kompletta namnet) lanserades. Det är alltså väldigt tidiga dagar för den nya versionen av språket och plattformen Java. Att det är en väldigt omvälvande ny version av Java stärker bilden av att väldigt få hunnit uppdatera ännu.
Men den dagen lär komma, för väldigt många. Det är inte bara praktiska förändringar i Java 9 som talar för det. Att stanna kvar med äldre Javaversioner kan potentiellt också medföra stora problem.
Så, hur jobbigt är det att uppdatera till Java 9?
Om man ska tro den tyska experten Nicolai Parlog så kan det bli rätt så besvärligt, för att uttrycka det milt. Han höll nyligen ett föredrag om att migrera till Java 9 på den välbesökta konferensen Jfokus i Stockholm. Det föredraget blev nog en ögonöppnare för många av åhörarna.
Läs också: Förlängt liv för Java 8 - men krånglet fortsätter
Under det nästan timslånga föredraget migrerade han en exempelapplikation (en applikation för övervakning av mikrotjänster) till Java 9. Under migreringen dök det upp flera typer av problem som han beskriver som typiska för migreringsprojekt.
En sammanfattning är att problemen har att göra med hur standardkod som behövs för att en applikation ska fungera är organiserad och hur man definierar var den finns. Allt detta är en följd av den stora nyheten i Java 9, nämligen modulsystemet. Alltså hur koden i standardbiblioteket till Java är organiserad och, på sikt, hur applikationsutvecklare lär komma att organisera den kod de skriver själva.
Rent konkret visar sig problemen främst genom att kompileringar inte går igenom. Här är en mer detaljerad genomgång av de migreringsproblem Nicolai Parlog stötte på:
- En definition av att kod i ett gammalt standardpaket för Javaplattformen ska användas fungerar inte. Eftersom Oracle, företaget bakom Java, vill fasa ut sådana gamla paket fungerar inte referenserna till dem eller så har paketen helt enkelt tagits bort. I det här fallet gällde det paketet sun.misc. Paket är ett sätt att organisera Javakod logiskt.
- Eftersom reglerna för hur kod kan refereras med så kallad ”reflektion” ändrats så kommer vissa referenser till sådan kod inte att fungera. Nicolai Parlogs råd är att uppdatera version för koden i fråga eller helt enkelt att ”uppdatera allt”.
- Vissa paket som egentligen hört till serverplattformen Java EE har tidigare varit nåbara på Java SE. Så är inte längre fallet, vilket leder till att kompileringen inte går igenom. Välj ett tredjepartsalternativ eller lägg till Java EE-moduler.
- Tidigare har paket kunnat splittras mellan flera fysiska JAR-filer. Nu när moduler ersätter JAR-filer krävs det att ett paket finns i en modul. Man kan fortfarande referera till JAR-filer, men om det finns ett paket med samma namn i flera JAR-filer så blir det knas. En lösning är att döpa om paket.
- Sättet att ladda klassökvägen (class path) har förändrats. Det kan göra att lösningar från äldre applikationer inte fungerar, vilket leder till att referenser blir fel.
- Vissa inställningar, så kallade flaggor, måste ändras under körningen av ett äldre program, om det ska fungera med Java 9.
Puh. Den här sammanställningen bör med all tydlighet visa att det handlar om tekniska problem på detaljnivå som kan vara svåra att hitta, analysera och lösa. Och det kan lätt uppstå flera olika problem av den här typen i en äldre applikation som ska kompileras på Java 9.
Läs också: Efter allt käbbel: nu är nya Java här
När kan man förvänta sig att migreringar till Java 9 tar fart på allvar?
– När Java 8 dör på allvar, när det inte kommer fler publika uppdateringar av den versionen, säger Nicolai Parlog till Techworld.
Som det ser ut nu ska det komma publika uppdateringar av Java 8 till och med januari nästa år.
Hur många Java-utvecklare kommer att behöva ägna sig åt sådana här migreringsproblem?
– Genomsnittliga team med Java-utvecklare omfattar mellan fem och tio personer. Man kan räkna med att det blir en person i varje team som ansvarar för migreringar.
Det är inte helt glasklart hur en uppdateringsstrategi ska utformas. Till saken hör att Oracle ökar takten rejält. Version 10 ska komma i mars och då läggs version 9 på hyllan. Sedan kommer version 11, som ska bli långvarig, redan i september.
Läs också: Baksidan av container-trenden – nya säkerhetsproblem
Ska man gå direkt till version 11 i september eller ska man ta en version i taget?
– Jag tycker man ska ta det stegvis, en version i taget. Men jag tror inte det spelar så stor roll. Om man går direkt från version 8 till version 11 så tror jag ändå att de flesta problem som uppstår kan beskrivas som version 9-problem.
Nicolai Parlog bloggar, håller föredrag och utbildningar, samt genomför konsultuppdrag som har att göra med migreringar till Java 9. Han skriver även boken The Java Module System som publiceras fortlöpande digitalt och som ska komma i tryckt form i sommar.