# Spring Boot Maven pom.xml-Eintrag



## matze86 (5. Dez 2022)

Hallo, ich habe mit Spring-Boot in Eclipse ein Maven-Projekt geöffnet, ich brauch die Abhängigkeiten "javax.persistence", heißt ich brauche jpa.
Laut Repository muss ich in der pom.xml folgendes eintragen:

```
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-jpa -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
    <version>3.0.0</version>
</dependency>
```

Trotzdem bleibt der Fehler das es nicht gefunden wurde beim Import.
Muss ich da noch irgend etwas aktualisieren?


----------



## LimDul (5. Dez 2022)

In Spring Boot 3 dürfte es javax.persistence nicht mehr geben. Das ist dann alles jakarta.persistence.

Wichtig ist, dass in einem Projekt man *nur eine JavaEE Version verwendet*. Das heißt nichts mischt.
In Spring Boot ist das relativ einfach, wenn man bei der Spring-Boot Parent POM bleibt. Da darf man einfach nie Versionen beim einbinden von dependencies angeben, sondern nimmt immer die vorgebene Version aus dem Dependency Management.


----------



## KonradN (5. Dez 2022)

Das Thema ist doch jetzt zum dritten Mal hier im Forum... Werden jetzt Spring Boot 2.x Anleitungen mit Spring Boot 3 genutzt?

Wenn Du unbedingt javax.persistence nutzen willst (Wieso eigentlich?), dann bleib bei Spring Boot 2.x!

Wenn Du ein aktuelles Spring Boot nutzen willst, dann übernimm nicht Dinge blind, die für alte Versionen gemacht wurden. Und von Spring 2.x zu Spring Boot 3 ist schon ein großer Schritt. Da hat es einiges gegeben - einen ersten Hinweis findest Du zu meinem Post zu Spring 6 (Darauf basiert Spring Boot 3) - so Dinge wie der Wechsel zu Jakarta EE 9 (Womit der Wechsel von javax -> jakarta kam).

UNd noch ein wichtiger Hinweis: Wenn eine Klasse nicht gefunden wird: vernünftige IDEs bieten Dir da an, dass Klassen importiert werden. Da sollte dann die IDE jakarta.persitence vorschlagen als Lösung.


----------



## matze86 (5. Dez 2022)

Es handelt sich um Spring Boot 3. Ich möchte ein Rest erstellen siehe diesen  Thread. Ich wollte zum Import ein neuen Thread zur besseren Übersichtlichkeit aufmachen.

Ich habe mir schon unzählige Anleitungen angeschaut, aber fast jede Anleitung ist anders. Und da wurde die Annotation 
	
	
	
	





```
@Entity
```
 mit javax.persistence importiert.

Vielleicht hat jemand eine aktuelle Anleitung für Rest mit Spring Boot 3, die auch zeigt wie man Daten von der Datenbank holt, schickt (mit post, get, delete u.s.w.). Und auch wie man eventuell dann diese Authentifizierung vor nimmt.


----------



## KonradN (5. Dez 2022)

Die Lösung ist ganz einfach:
Ändere den Import von javax.persistence zu jakarta.persistence

Das wäre noch einmal in ganz kurz eben genau die Lösung zu dem Problem.

Und Spring Boot 3 ist extrem neu - noch kein Monat draußen. Wenn Du dieses umsetzen nicht willst, dann bleib bei Spring 2.7.2. Oder schau direkt auf spring.io nach der Dokumentation dort.


----------



## LimDul (5. Dez 2022)

Merker: Solange man nicht genau weiß was man tut - in einer POM, die den Spring Boot Parent verwendet, niemals Dependencies mit Versionen ergänzen. Immer ohne Version.

Wie sieht deine POM aus?


----------



## matze86 (5. Dez 2022)

Meine pom.xml sieht so aus:

```
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.0.0</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>de.resttest</groupId>
    <artifactId>matze</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>matze</name>
    <description>das ist ein test fuer rest</description>
    <properties>
        <java.version>17</java.version>
    </properties>
    <dependencies>
    
            <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!-- https://mvnrepository.com/artifact/com.mysql/mysql-connector-j -->
    <dependency>
        <groupId>com.mysql</groupId>
        <artifactId>mysql-connector-j</artifactId>
        <version>8.0.31</version>
    </dependency>
        
        
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>
```


----------



## LimDul (5. Dez 2022)

Schau dir das hier mal an: https://spring.io/guides/gs/accessing-data-mysql/

Da ist eine POM in GIT verlinkt: https://github.com/spring-guides/gs-accessing-data-mysql/blob/main/complete/pom.xml

Ändere mal die mysql-Dependency (und ersetzt ggf. alles javax.persistence Imports durch jakarta.persistence Imports, sofern die dann nicht eh compile Fehler erzeugen)


----------



## khmarbaise (5. Dez 2022)

Wenn Du mit Spring Boot 3.0.0 arbeiten musst/willst, dann musst Du Jakarta imports für die Entities verwenden...


```
package entities;

import jakarta.persistence.Entity;
import jakarta.persistence.EnumType;
import jakarta.persistence.Enumerated;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.Id;

@Entity
class Employee {

  @Id
  @GeneratedValue
  private Integer id;

  private String firstName;

  private String surname;

  @Enumerated(EnumType.STRING)
  private EmployeeType type;

...
}
```

Weiterhin entferne die Version von mysql, da die Version bereits durch den Parent entsprechend gesetzt ist. Man sollte die Versionen nur in dem Fall überschreiben, wenn man ganz genau weiß was man macht..

Die Spring Boot Version 3.0.0 wurden schon mit den Milestone Versionen und die RC versionen https://github.com/spring-projects/...otes/ecd6d1ce3a5c6654acfe4f39c4a7fa5faf7e3499

Die Erste 3.0.0-M1 Version gibt es seit März 2022...

Im Falle, der Verwendung einer neuer Major Release sollte man genauer einen Blick in die Release Notes bzw. Migrationsanleitungen werfen:









						Spring Boot 3.0 Migration Guide · spring-projects/spring-boot Wiki
					

Spring Boot. Contribute to spring-projects/spring-boot development by creating an account on GitHub.




					github.com
				




BTW: Als Startpunkt wird ich in solchen Fällen via Initializr gehen: https://start.spring.io/


----------



## mihe7 (5. Dez 2022)

LimDul hat gesagt.:


> Das ist dann alles jakarta.persistence.





KonradN hat gesagt.:


> Da sollte dann die IDE jakarta.persitence vorschlagen als Lösung.





KonradN hat gesagt.:


> Ändere den Import von javax.persistence zu jakarta.persistence





khmarbaise hat gesagt.:


> Wenn Du mit Spring Boot 3.0.0 arbeiten musst/willst, dann musst Du Jakarta imports für die Entities verwenden...


Hm... nach reiflicher Überlegung bin ich geneigt zu behaupten, dass es im Bereich des Möglichen liegt, die Verwendung von jakarta.persistence unter Spring Boot 3 durchaus als hilfreich zu erachten.


----------



## khmarbaise (5. Dez 2022)

mihe7 hat gesagt.:


> Hm... nach reiflicher Überlegung bin ich geneigt zu behaupten, dass es im Bereich des Möglichen liegt, die Verwendung von jakarta.persistence unter Spring Boot 3 durchaus als hilfreich zu erachten.


Hm.. mir ist nicht klar, was es da zu überlegen gibt. Entweder man geht den Weg zu Spring Boot 3.0.0+ oder eben nicht. Wenn nicht bleibt noch eventuell etwas Zeit, genau genommen bis November 2023. Danach wird es halt schwieriger, eben nur noch gegen Bezahlung (https://spring.io/projects/spring-boot#support). 

Spring Boot 3.0.0 ist eine Major Release und somit u.U. inkompatible mit vorheringen Versionen (Abgesehen davon ist die Migration von aktuellen Spring Boot Versionen 2.7.6 nicht wirklich sehr propblematisch. Das setzt selbstverständlich voraus, dass man bisher auch schon immer wieder aktualisiert hat und entsprechende Tests mit Abdeckung usw. hat, außer man hat sich extrem in die Internas von Spring reingehängt)... Das ist nun mal der Weg... Java EE ist nun mal nicht mehr wirklich Zukunftsträchtig... sondern Jakarta EE... 

Auszug aus den Release Notes:


> Spring Boot 3.0 has migrated from Java EE to Jakarta EE APIs for all dependencies. Wherever possible, Jakarta EE 10 compatible dependencies have been chosen, including:


Weiterhin gibt es entsprechende Dokumentationen für Upgrades etc.


----------



## mihe7 (5. Dez 2022)

khmarbaise hat gesagt.:


> Hm.. mir ist nicht klar, was es da zu überlegen gibt


Gut, ich hätte vielleicht ein SCNR dahintersetzen sollen


----------



## khmarbaise (5. Dez 2022)

mihe7 hat gesagt.:


> Gut, ich hätte vielleicht ein SCNR dahintersetzen sollen


Ok.. Das ist ein Punkt ;-)


----------



## matze86 (6. Dez 2022)

Nachdem ich jetzt in der pom.xml 

```
<dependency>
          <groupId>jakarta.persistence</groupId>
          <artifactId>jakarta.persistence-api</artifactId>
    </dependency>
```
 hinzugefügt habe, ist die Abhängigkeit 'jakarta.persistence' auch in Maven Dependencies eingetragen.

Wenn ich jetzt @Entity eingebe, dann schlägt mir Eclipse den Import von 'jakarta.persistence.Entity' vor, soweit alles gut es wird auch importiert.

Allerdings danach wird bei Entity immer noch ein Fehler angezeigt (Entity kann nicht in einen Typ aufgelöst werden), worauf es wieder importieren vorschlägt. seltsam.


----------



## LimDul (6. Dez 2022)

Tipp: Nimm dir mal Zeit und versuche mal zu verstehen, was du da tust. Schmeiß die Dependency, die du hinzugefügt hast, wieder raus und mach es richtig.  Lies dir mal durch, was Spring Boot Starter sind und wie Spring Boot aufgebaut ist. Wenn du mit JPA arbeiten willst, nimmst du nicht die jakarta-persistence depdency sondern den starter für jpa. Schau dir z.B. die POM die ich oben verlinkt habe oder erzeug dir über den spring initializer eine POM.


----------



## Oneixee5 (6. Dez 2022)

khmarbaise hat gesagt.:


> Abgesehen davon ist die Migration von aktuellen Spring Boot Versionen 2.7.6 nicht wirklich sehr propblematisch.


Na du bist ja optimistisch! Es sind nicht nur die Packages. Spring Cloud etc. sind noch RC's. Es gibt Änderungen für Hibernate, Security usw... Eureka ist die Hölle, ...Spring6NotImplementedException's.... Ich bin schon 3 Tage an 26 Microservices incl. Cloud. Ich sehe noch keine richtiges Ende und an die Tests denke ich noch gar nicht.
Das Projekt soll Mitte-Januar in Produktion gehen und der Kunde wünscht für den Start die neuesten Versionen. Das sehe ich noch nicht so. Ein paar frei Tage hätte ich auch gern über den Jahreswechsel.


----------



## mihe7 (7. Dez 2022)

Oneixee5 hat gesagt.:


> Ein paar frei Tage hätte ich auch gern über den Jahreswechsel.


30.12. wäre ein Frei-tag, das muss reichen


----------



## matze86 (7. Dez 2022)

Vielen dank euch.


----------

