[Java] Gibt es einen Unterschied zwischen Java und Maven was den Compiler angeht?
Ich habe ein TikTakToe Spiel mit Java 17 Programmiert. Nun wollte ich es meinem Lehrer schicken. Der wollte aber, dass ich das Ganze mit Maven mache. Gesagt, getan. Ich habe Maven "aufgesetzt" und meinen Code eingefügt. Nun habe ich aber das Problem, dass die Button alle auf Final gesetzt werden müssen (Sonst gibt es einen Fehler "cannot refer to non-final local variable button1 defined in an enclosing scope"). Was logischerweise nicht wirklich Sinn macht, wenn man mit dem Button interagieren will. Komischerweise geht der Code in meinem privaten Workspace, hier muss ich die Button nicht auf Final setzen. Der gleiche Code geht aber im Workspace mit Maven nicht, hier soll ich die Button auf Final setzen.
Hat jemand eine Idee, woran das liegen könnte?
--Die Button nutze ich als Felder die man anklicken kann um TikTakToe zu spielen.
MfG, danke an alle die helfen können.
2 Antworten
Maven ist ein System, mit dem das Projekt strukturiert und verwaltet wird. Du hast da z.B. diese "pom.xml", mit der du u.a. Libraries einfach per XML-Deklaration importieren kannst und du hast sie sofort zur Verfügung und kannst damit arbeiten. Ohne Maven müsstest du die .jars runterladen und manuell reinfrickeln bzw. der Entwicklungsumgebung mitteilen, dass die mitkompiliert werden sollen, was je nach Entwicklungsumgebung ziemlich nervig sein kann).
Maven ist nur ein Zusatz, der das "drumherum" verwaltet.
Das Java selbst ändert sich dadurch nicht - Es sei denn, du hast in der pom eine falsche Java-Version angegeben^^.
Das Problem mit den final-Variablen hat daher nichts mit Maven zutun. Da hast du was anderes vergurkt.
Dieses Problem hast du idr. bei lokalen Variablen, wenn du sie threadübergreifend bzw. über Instanzgrenzen hinweg verwendest UND nach einmaliger Zuweisung später nochmal veränderst.
Ein Unterschied kann darin liegen, für welche Java-Version und mit welchem JDK du das Programm bauen lässt. In Maven kann man all das mit dem Compiler Plugin (maven-compiler-plugin) vorgeben.
- Via maven.compiler.source setzt man die Java-Version, deren Sprachfeatures verwendet werden sollen
- Via maven.compiler.target setzt man die Zielversion, für die die Anwendung später kompatibel sein soll
- Via compilerVersion bestimmt man die Compiler-Version, die für den Build genutzt werden soll
Du hast in deinem speziellen Fall sicherlich eine ältere Java-Version beim Build eingesetzt.