Maven Abhängigkeiten überprüfen auf Kompatibilität mit einer anderen Java-Version

Bitte aktiviere JavaScript!
Hallo zusammen,

ich soll unser Arbeitsprojekt auf eine höhere Java-Version stellen. Wir bauen mit Maven und deployen mit Tomcat.

Ich benutze Intellij als IDE, gibt es dort eine Möglichkeiten zumin. die Dependencies prüfen zu lassen ob die mit Java 11 kompatibel sind? Also ein Tool dass die pom.xml untersucht.

Danke im Voraus.
 
A

Anzeige


Vielleicht hilft dir dieser Kurs hier weiter: (hier klicken)
Mir ist keine Möglichkeit bekannt, Maven bietet nur die Möglichkeit, dass man eine Minimalversion angibt, aber keine Möglichkeit für eine Maximalversion.

Solange da nicht grober Unfug getrieben wurde, sollte das aber problemlos auf 11 laufen. Einfach mal mit 11 kompilieren und alle Tests durchlaufen lassen.

Probleme machen meist nur Dinge, die den Bytecode manipulieren oder nicht mehr vorhandene Abhängigkeiten nutzen, beides finden man normalerweise recht schnell.
 
Ok, wir haben wohl Probleme mit Tomcat 8 und höher. Bekomme Servlet Exceptions, die laut Stackoverflow darauf hindeuten dass etwas in einer veralteten Version Kompiliert wird. In unserer Pom wird aber nirgendwo explizit angegeben dass irgendein Modul anders kompiliert werden soll als Overall angegeben in der Pom.
 
Ob Dinge zu alt sind, kann man natürlich überprüfen.

Mit dem Dependency-Plugin kann man nach Duplikaten suchen, der Grund für solche Fehler können in verschiedenen Versionen eingebundene Dependencies sein. Verhindern kann man doppelte dann mit dem Enforcer-Plugin.
Mit dem Versions-Plugin kann man nach Updates suchen, damit finden man recht schnell sehr veraltete Versionen.



Kannst du mal eine der Exceptions zeigen? Wenn ich raten müsste, würde ich auf irgendeine mit ByteCode arbeitenden Lib tippen, cglib oder asm?
 
Zuletzt bearbeitet:
Etwas abseits der Servlet Geschichte: Ich habe gerade versucht das Projekt mit Java 9(OpenJDK) zu bauen mit Maven, da werden mir schon direkt Exceptions geworfen. Gehe ich recht in der Annahme dass
<spring.version>4.2.5.RELEASE</spring.version> zu niedrig ist für Java 9?

EDIT: Meine ganzen automatisch erzeugten Bean Klassen werden nicht mehr erkannt. symbol: class meineBean_
Error: cannot find symbol
 
Zuletzt bearbeitet:
EDIT: Meine ganzen automatisch erzeugten Bean Klassen werden nicht mehr erkannt. symbol: class meineBean_
Error: cannot find symbol
Ist das der einzige Fehler? Dann würde ich mal prüfen, wie die generiert werden.

Etwas abseits der Servlet Geschichte: Ich habe gerade versucht das Projekt mit Java 9(OpenJDK) zu bauen mit Maven, da werden mir schon direkt Exceptions geworfen. Gehe ich recht in der Annahme dass
<spring.version>4.2.5.RELEASE</spring.version> zu niedrig ist für Java 9?
Der Build sollte durchlaufen, erst zur Laufzeit kann das Probleme geben, weil zT Libs nur mit bestimmten Java-Versionen laufen (zB die oben genannten asm und cglib), ich weiß nicht, ob es da ein Update für Spring 4 gab.


Allerdings sind kompilieren mit 9, für 9 und ausführen auf 9 drei unterschiedliche Dinge (9 ist bzw "deprecated").
Auf 9 sollte es direkt laufen, uU muss man Jaxb mitliefern.
Mit 9 für 8 kompilieren sollte auch klappen.
Für 9 kompilieren braucht mindestens Anpassung einiger Libs, die nur mit bestimmten Byte-Code-Versionen laufen.
 
JPA war noch nie im JDK enthalten.

JAXB ist rausgeflogen, sollte beim Fehlen aber eine verständliche Exception liefern, kann man über Maven als Dependency einbinden.
 
Danke dir, das eliminiert schon mal die Fehler die ich bisher hatte. Dachte bis eben, JPA ist eine Schnittstelle die automatisch mit JDK daher kommt und dann von einem Vendor wie Hibernate angesprochen wird. Wieder was dazu gelernt.

Jetzt bekomme ich aber eine andere Exception :)

Code:
Failed to execute goal org.codehaus.mojo:aspectj-maven-plugin:1.8:compile
Execution default of goal org.codehaus.mojo:aspectj-maven-plugin:1.8:compile failed: Plugin org.codehaus.mojo:aspect
Mal schauen was ich dazu finde.
 
aspectj-maven-plugin muss in jedem Fall aktualisiert werden, dass arbeitet mit festen Byte-Code-Versionen.
Die aktuelle Version davon hat Unterstützung für aktuelle Java-Versionen.
 
aspectj-maven-plugin muss in jedem Fall aktualisiert werden, dass arbeitet mit festen Byte-Code-Versionen.
Die aktuelle Version davon hat Unterstützung für aktuelle Java-Versionen.
Habe ich auch gerade festgestellt. In meiner POM ist einmal:

CSS:
<!-- ASPECTJ VERSION -->
        <aspectj.version>1.8.9</aspectj.version>
        <proc>none</proc>

//Die habe ich auf 1.9.2 erhöht
Code:
<plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>aspectj-maven-plugin</artifactId>
                <version>1.8</version>
                <configuration>
                    <showWeaveInfo>true</showWeaveInfo>
                    <verbose>false</verbose>
                    <source>${java.version}</source>
                    <target>${java.version}</target>
                    <complianceLevel>${java.version}</complianceLevel>
                    <encoding>${project.build.sourceEncoding}</encoding>
                    <proc>none</proc>
                    <aspectLibraries>
                        <aspectLibrary>
                            <groupId>org.springframework</groupId>
                            <artifactId>spring-aspects</artifactId>
                        </aspectLibrary>
                    </aspectLibraries>
                </configuration>
                <executions>
                    <execution>
                        <phase>generate-sources</phase>
                        <goals>
                            <goal>compile</goal>
                        </goals>
                    </execution>
                </executions>
                <dependencies>
                    <dependency>
                        <groupId>org.aspectj</groupId>
                        <artifactId>aspectjrt</artifactId>
                        <version>${aspectj.version}</version>
                    </dependency>
                    <dependency>
                        <groupId>org.aspectj</groupId>
                        <artifactId>aspectjtools</artifactId>
                        <version>${aspectj.version}</version>
                    </dependency>
                </dependencies>
            </plugin>

// Die habe ich auf 1.11 geändert
https://mvnrepository.com/artifact/org.codehaus.mojo/aspectj-maven-plugin
Leider selbe Exception...

EDIT:
Code:
Could not find artifact com.sun:tools:jar:9.0.4 at specified path C:\Program Files\openjdk\jdk-9.0.4/../lib/tools.jar -> [Help 1]
 
Zuletzt bearbeitet:
Das Problem konnte ich jetzt lösen in dem ich mit Hilfe dieses Threads das direkt aus einem Githubproject lade.
Code:
<groupId>com.github.m50d</groupId>
            <artifactId>aspectj-maven-plugin</artifactId>
            <version>1.11.1</version>
https://stackoverflow.com/questions/48173963/maven-aspectj-plugin-fails-to-build-with-java-9-due-to-missing-tools-jar

EDIT: musste jetzt noch das hinzufügen und nun lässt sich endlich das Ganze in 9 zumin. bauen.
Code:
<dependency>
    <groupId>javax.annotation</groupId>
    <artifactId>javax.annotation-api</artifactId>
    <version>1.3.1</version>
</dependency>
 
Passende Stellenanzeigen aus deiner Region:

Neue Themen

Oben