diff --git a/content/en/docs/java/maven.md b/content/en/docs/java/maven.md index fa7788ff7..b65742516 100644 --- a/content/en/docs/java/maven.md +++ b/content/en/docs/java/maven.md @@ -21,10 +21,11 @@ description: > ### Allgemeine Informationen -Apache Maven ist ein Build-Management Tool. Das heisst, Maven kann den Build eines Projekts von einer einzigen Datei aus steuern. -Diese zentrale Datei ist das Project Object Model, kurz auch POM genannt. -Ein Build ist der Prozess, bei dem der Quellcode eines Programms in eine ausführbare Form gebracht wird, häufig durch Kompilieren und Paketieren. -Der Build eines Projekts kann dabei von einfacher Kompilierung bis zur Auslieferung einer Anwendung auf eine bestimmte Plattform reichen. +Apache Maven ist ein Build-Management Tool. Das heisst, Maven kann den Build eines Projekts von einer einzigen Datei aus +steuern. Diese zentrale Datei ist das Project Object Model, kurz auch POM genannt. Ein Build ist der Prozess, bei dem +der Quellcode eines Programms in eine ausführbare Form gebracht wird, häufig durch Kompilieren und Paketieren. +Der Build eines Projekts kann dabei von einfacher Kompilierung bis zur Auslieferung einer Anwendung auf eine bestimmte +Plattform reichen. Damit Maven funktionieren kann, benötigt ein Projekt die folgenden Dinge: @@ -36,10 +37,13 @@ Damit Maven funktionieren kann, benötigt ein Projekt die folgenden Dinge: --- -### Manuelle Installation +### Installation -Idealerweise wurde Apache Maven bereits mit IntelliJ installiert. Damit du Maven auch auf der Kommandozeile ausführen kannst, kannst du Maven hier herunterladen: -[https://maven.apache.org/download.cgi](https://maven.apache.org/download.cgi). Verwende die Binary anstelle der Source, und zwar am besten die Datei im `Binary zip archive` Format. +#### Manuelle Installation + +Idealerweise wurde Apache Maven bereits mit IntelliJ installiert. Alternativ kannst du Maven auch hier herunterladen: +[https://maven.apache.org/download.cgi](https://maven.apache.org/download.cgi). Verwende die Binary anstelle der Source, +und zwar am besten die Datei im `Binary zip archive` Format. Klicke dazu auf den folgenden Link, wie hier im Beispiel: ![Apache Maven Project Download (Stand: 22.09.2024)](../maven/maven_download.png) @@ -51,28 +55,61 @@ Entpacke die heruntergeladene Datei dort. Du kannst danach die Umgebungsvariable --- +#### IntelliJ IDEA + +Ist IntelliJ installiert, findet man in den allgemeinen Einstellungen auch die Einstellungen für Maven. Normalerweise +sind diese Einstellungen bereits korrekt. + +![Intellij Maven settings](../maven/intellij_maven_settings.png) + +Die wichtigsten Einstellungen sind: + +| Einstellung | Beschreibung | +| -------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------- | +| Maven home directory | Zeigt auf das Verzeichnis einer Maven-Installation. Das IntelliJ verfügt bereits über eine Maven-Installation, diese wird als "Bundled" bezeichnet. | +| User settings file | Die XML-Datei, welche bei der Installation angelegt wurde. | +| Local repository | Der Ablageort für das lokale Repository, dieser ist normalerweise unter C:\Users\\\\\.m2.\\repository zu finden. | + +Bei diesen Einstellungen muss überprüft werden, dass die Pfad-Angaben für die XML-Datei und das lokale Repository +korrekt sind. + +--- + ### Umgebungsvariablen setzen Damit Maven auch auf der Command-Line funktioniert, muss eine Umgebungsvariable gesetzt werden. -Unter Windows muss also der Pfad zu deiner installierten Maven-Version hinzugefügt werden. Dadurch weiss Windows, wo die Binary für Maven zu finden ist, wenn du Maven aus dem Terminal ausführst. Die folgenden Schritte sind dazu notwendig: - -| # | Beschreibung | -| --- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| 1 | Anwendung "Systemumgebungsvariablen bearbeiten" aus der Systemsteuerung starten. Falls das nicht geht, musst du dir (temporär) lokale Admin-Rechte aktivieren. | -| 2 | Unten rechts auf den Button "Umgebungsvariablen" klicken. | -| 3 | Im unteren Teil "Benutzervariablen" die Variable "Path" suchen und anklicken. | -| 4 | Auf den Button "Bearbeiten..." klicken. | -| 5 | Oben rechts auf den Button "Neu" klicken, es erscheint eine neue Zeile ganz unten. | -| 6 | Den Pfad zu deinem installierten Maven einfügen. Hier kannst du das erstellte Verzeichnis verwenden. Der Pfad sollte auf bin zeigen, also zum Beispiel: **C:\Program Files\Apache\Maven\apache-maven-3.9.9\bin**. Du musst sicherstellen, dass die Version mit deiner heruntergeladenen Version übereinstimmt. | -| 7 | Alle offenen Windows-Fenster mit "OK" schliessen. | - -Um die Installation zu überprüfen, führen den folgenden Befehl in deinem Terminal (du findest es unter _Eingabeaufforderung_ oder _cmd_ in der Windows Suche) aus:\ +Unter Windows muss also der Pfad zu deiner installierten Maven-Version hinzugefügt werden. Dadurch weiss Windows, wo die +Binary für Maven zu finden ist, wenn du Maven aus dem Terminal ausführst. Die folgenden Schritte sind dazu notwendig: + +1. Anwendung "Systemumgebungsvariablen bearbeiten" aus der Systemsteuerung starten. Falls das nicht geht, musst du dir + (temporär) lokale Admin-Rechte aktivieren. + +2. Unten rechts auf den Button "Umgebungsvariablen" klicken. + +3. Im unteren Teil "Benutzervariablen" die Variable "Path" suchen und anklicken. + +4. Auf den Button "Bearbeiten..." klicken. + +5. Oben rechts auf den Button "Neu" klicken, es erscheint eine neue Zeile ganz unten. + +6. Den Pfad zu deinem installierten Maven einfügen. Hier kannst du das erstellte Verzeichnis verwenden. Der Pfad sollte + auf das Verzeichnis bin zeigen, also zum Beispiel: + + - manuelle Installation: **C:\Program Files\Apache\Maven\apache-maven-3.9.9\bin** + - IntelliJ installiert: **C:\Users\u......\AppData\Local\Programs\IntelliJ IDEA Ultimate\plugins\maven\lib\maven3\bin** + +7. Alle offenen Windows-Fenster mit "OK" schliessen. + +Um die Installation zu überprüfen, führen den folgenden Befehl in deinem Terminal (du findest es unter +_Eingabeaufforderung_ oder _cmd_ in der Windows Suche) aus: + `mvn -version` -Falls es korrekt installiert ist, wird dir Maven die Version liefern, also zum Beispiel:\ +Falls es korrekt installiert ist, wird dir Maven die Version liefern, also zum Beispiel: + `Apache Maven 3.9.6 (bc0240f3c744dd6b6ec2920b3cd08dcc295161ae)` -![img.png](../maven/cmd_maven_version.png) +![Maven Version](../maven/cmd_maven_version.png) Die Version muss nicht mit deiner übereinstimmen. @@ -111,28 +148,11 @@ Ersetze `{JDK home path}` mit deinem kopierten Wert. Öffne danach ein neues Ter --- -### IntelliJ IDEA einrichten - -Im IntelliJ findet man in den allgemeinen Einstellungen auch die Einstellungen für Maven. Normalerweise sind diese Einstellungen bereits korrekt. - -![Intellij Maven settings](../maven/intellij_maven_settings.png) - -Die wichtigsten Einstellungen sind: - -| Einstellung | Beschreibung | -| -------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------- | -| Maven home directory | Zeigt auf das Verzeichnis einer Maven-Installation. Das IntelliJ verfügt bereits über eine Maven-Installation, diese wird als "Bundled" bezeichnet. | -| User settings file | Die XML-Datei, welche bei der Installation angelegt wurde. | -| Local repository | Der Ablageort für das lokale Repository, dieser ist normalerweise unter C:\Users\\\\\.m2.\\repository zu finden. | - -Bei diesen Einstellungen muss überprüft werden, dass die Pfad-Angaben für die XML-Datei und das lokale Repository korrekt sind. - ---- - ### pom.xml -Der Aufbau eines Project Object Models kann grob in folgende Abschnitte unterteilt werden, hier erklärt an einem umfangreichen Beispiel. -Die einzelnen Teile werden gleich im Anschluss näher erläutert. Bitte beachte, dass dieses Project Object Model nicht alle Inhalte vollständig erklärt, sondern nur als erstes Beispiel dient. +Der Aufbau eines Project Object Models kann grob in folgende Abschnitte unterteilt werden, hier erklärt an einem +umfangreichen Beispiel. Die einzelnen Teile werden gleich im Anschluss näher erläutert. Bitte beachte, dass dieses +Project Object Model nicht alle Inhalte vollständig erklärt, sondern nur als erstes Beispiel dient. ```xmlmarkdown.md @@ -218,14 +238,20 @@ Die einzelnen Teile werden gleich im Anschluss näher erläutert. Bitte beachte, #### Abschnitt 1 -Der Header einer Project Object Model Datei bleibt grundsätzlich so wie dargestellt. Die Angaben zum Schema sind dabei optional. Falls andere Schemas verwendet werden, so sind diese hier zu deklarieren. +Der Header einer Project Object Model Datei bleibt grundsätzlich so wie dargestellt. Die Angaben zum Schema sind dabei +optional. Falls andere Schemas verwendet werden, so sind diese hier zu deklarieren. #### Abschnitt 2 Die Angaben zum Artefakt enthalten die folgenden Informationen: -- **Gruppen-ID**: Die Gruppen-ID ist in Maven normalerweise als umgekehrte Domain-Name-Notation (Reverse Domain Name Notation) aufgebaut, ähnlich wie bei Java-Paketen. Diese Struktur dient dazu, Konflikte zwischen Artefakten von verschiedenen Organisationen zu vermeiden. Zum Beispiel wird die Gruppen-ID für ein Projekt der SBB oft in der Form ch.sbb beginnen, da sbb.ch die Domain der Schweizerischen Bundesbahnen ist. Beispiel: ch.sbb.interviewtool -- **Artefakt-ID**: Die Artefakt-ID ist der eindeutige Name eines Projekts oder einer Komponente, der zusammen mit der Gruppen-ID und der Version verwendet wird, um ein Artefakt im Repository eindeutig zu identifizieren. Beispiel: interviewtool-backend, mit der Gruppen-ID: ch.sbb.interviewtool:interviewtool-backend. +- **Gruppen-ID**: Die Gruppen-ID ist in Maven normalerweise als umgekehrte Domain-Name-Notation (Reverse Domain Name + Notation) aufgebaut, ähnlich wie bei Java-Paketen. Diese Struktur dient dazu, Konflikte zwischen Artefakten von + verschiedenen Organisationen zu vermeiden. Zum Beispiel wird die Gruppen-ID für ein Projekt der SBB oft in der + Form ch.sbb beginnen, da sbb.ch die Domain der Schweizerischen Bundesbahnen ist. Beispiel: ch.sbb.interviewtool +- **Artefakt-ID**: Die Artefakt-ID ist der eindeutige Name eines Projekts oder einer Komponente, der zusammen mit der + Gruppen-ID und der Version verwendet wird, um ein Artefakt im Repository eindeutig zu identifizieren. Beispiel: + interviewtool-backend, mit der Gruppen-ID: ch.sbb.interviewtool:interviewtool-backend. - **Version**: Die momentane Version des Projekts, diese wird später durch Releases verändert. - **Paketierung**: Angabe, in welcher Form das Artefakt geliefert wird. Der Default ist Java Archive (JAR). @@ -248,18 +274,23 @@ Dazu ein paar Beispiele: | Build-Number | 1.4.2-12 | | Qualifier | 1.2-beta-2 | -Alle Versionen mit Qualifier sind dabei älter als die gleiche Version ohne Qualifier. Beispielsweise ist die Version **1.2-beta-2** älter als die Version **1.2**. -Gleiche Versionen mit unterschiedlichen Qualifiern werden durch den Vergleich dieser als String verglichen. So ist die Version **1.2-beta-2** neuer als die Version **1.2-alpha-6**. +Alle Versionen mit Qualifier sind dabei älter als die gleiche Version ohne Qualifier. Beispielsweise ist die Version +**1.2-beta-2** älter als die Version **1.2**. Gleiche Versionen mit unterschiedlichen Qualifiern werden durch den +Vergleich dieser als String verglichen. So ist die Version **1.2-beta-2** neuer als die Version **1.2-alpha-6**. -Der SNAPSHOT-Qualifier wird verwendet, wenn eine Version noch nicht ausgeliefert wurde. So wird die Version **0.1.2-SNAPSHOT** sehr wahrscheinlich als Version **0.1.2** ausgeliefert werden. +Der SNAPSHOT-Qualifier wird verwendet, wenn eine Version noch nicht ausgeliefert wurde. So wird die Version +**0.1.2-SNAPSHOT** sehr wahrscheinlich als Version **0.1.2** ausgeliefert werden. #### Abschnitt 3 -Falls das Projekt Bestandteil eines anderen Projektes ist, müssen hier die Artefakt-Angaben des sogenannten Parent-Projekts hinterlegt werden. Dies ist vor allem bei [Spring-Boot](spring-framework/spring-boot/06_spring-boot.md) Projekten wichtig. +Falls das Projekt Bestandteil eines anderen Projektes ist, müssen hier die Artefakt-Angaben des sogenannten +Parent-Projekts hinterlegt werden. Dies ist vor allem bei [Spring-Boot](spring-framework/spring-boot/06_spring-boot.md) +Projekten wichtig. #### Abschnitt 4 -Die Einstellungen in Maven sind beliebig wählbare Tags. So kann beispielsweise eine bestimmte Einstellung oder eine Version definiert werden. +Die Einstellungen in Maven sind beliebig wählbare Tags. So kann beispielsweise eine bestimmte Einstellung oder eine +Version definiert werden. Beispiel: @@ -277,21 +308,41 @@ auf die Einstellung (Tag) und damit auf dessen Wert (Value) zugegriffen werden. #### Abschnitt 5 -Abhängigkeiten zu Fremdbibliotheken. Diese sollten stets Gruppen-ID, Artefakt-ID und Version enthalten. Der Typ der Abhängigkeit gibt an, um welche Art von Bibliothek es sich handelt. Nicht alle Java-Bibliotheken werden als JAR ausgeliefert. -Eine Liste der möglichen Typen findest du hier: [https://maven.apache.org/ref/3.6.3/maven-core/artifact-handlers.html](https://maven.apache.org/ref/3.6.3/maven-core/artifact-handlers.html). +Abhängigkeiten zu Fremdbibliotheken. Diese sollten stets Gruppen-ID, Artefakt-ID und Version enthalten. Der Typ der +Abhängigkeit gibt an, um welche Art von Bibliothek es sich handelt. Nicht alle Java-Bibliotheken werden als JAR +ausgeliefert. + +Eine Liste der möglichen Typen findest du hier: +[https://maven.apache.org/ref/3.6.3/maven-core/artifact-handlers.html](https://maven.apache.org/ref/3.6.3/maven-core/artifact-handlers.html). + Vielfach wird auch der Scope verwendet, der angibt, in welchem Umfang die Fremdbibliothek einbezogen wird. Mögliche Scopes sind unter anderem: -- compile - Das ist der Default-Scope. Diese Bibliotheken sind in allen Klassenpfaden verfügbar (Classpath), werden also mitausgeliefert. -- provided - Gleich wie compile, ausser das die Bibliothek zur Laufzeit von einem Container (wie dem JDK) erwartet und bereitgestellt wird. -- runtime - Zeigt an, dass die Bibliothek zur Kompilierung nicht verwendet wird. Zur Laufzeit steht sie dann zur Verfügung. +- compile - Das ist der Default-Scope. Diese Bibliotheken sind in allen Klassenpfaden verfügbar (Classpath), werden also + mitausgeliefert. +- provided - Gleich wie compile, ausser das die Bibliothek zur Laufzeit von einem Container (wie dem JDK) erwartet und + bereitgestellt wird. +- runtime - Zeigt an, dass die Bibliothek zur Kompilierung nicht verwendet wird. Zur Laufzeit steht sie dann zur + Verfügung. - test - Die Bibliothek steht nur für Tests zur Verfügung und wird nur fürs Testing benötigt. - system - Gleich wie provided, mit der Ausnahme, dass die Bibliothek explizit auf dem System zur Verfügung stehen muss. +Das [MVN Repository](https://mvnrepository.com/) stellt eine Vielzahl von Fremdbibliotheken zur Verfügung. Maven +versucht Abhängigkeiten über dieses Repository aufzulösen. + +##### Beispiel einer Abhängigkeit (junit-jupiter-engine) + +Die Dependency `junit-jupiter-engine` ist eine grundlegende Bibliothek für das Testen von Java-Anwendungen mit JUnit 5, +einem weit verbreiteten Test-Framework für Java. Im Kapitel [Testing](../java-testing) wirst diese ausführlich genutzt. + +Ein weiteres Beispiel für eine Abhängigkeit ist `lombok`. Diese Library wird im Kapitel [Lombok](../lombok) ausführlich +beschrieben. + #### Abschnitt 6 -Die Build-Informationen konfigurieren den Ablauf des Maven-Builds. Mit Plugins kann der Build selbst durch spezifische Erweiterungen beliebig angepasst werden. -Es ist auch möglich, eigene Maven-Plugins zu entwickeln. Es stehen sehr viele Plugins für Maven zur Verfügung, eine Übersicht gibt es [hier](https://maven.apache.org/plugins/index.html). +Die Build-Informationen konfigurieren den Ablauf des Maven-Builds. Mit Plugins kann der Build selbst durch spezifische +Erweiterungen beliebig angepasst werden. Es ist auch möglich, eigene Maven-Plugins zu entwickeln. Es stehen sehr viele +Plugins für Maven zur Verfügung, eine Übersicht gibt es [hier](https://maven.apache.org/plugins/index.html). #### Abschnitt 7 @@ -299,15 +350,84 @@ Die Entwickler-Informationen dienen dazu, an der Entwicklung beteiligte Personen --- -### Beispiel einer Abhängigkeit (spring-boot-starter) +### Maven Mirror + +Ein Mirror in Maven ist eine alternative Quelle, von der Maven Artefakte (wie Abhängigkeiten, Plugins usw.) herunterladen +kann. Mirrors werden verwendet, um die Verfügbarkeit und Geschwindigkeit des Downloads zu verbessern, insbesondere wenn +das Standard-Repository (z. B. Maven Central) aus irgendeinem Grund nicht erreichbar ist oder wenn ein internes +Repository bevorzugt wird. + +#### Konfiguration eines Mirrors -Die Dependency `spring-boot-starter` ist eine grundlegende Bibliothek für Spring-Boot Projekte, die automatisch alle benötigten Abhängigkeiten einbindet, um die Anwendung zu starten und auszuführen. Dadurch wird der Aufbau von Spring-Anwendungen vereinfacht, da häufig verwendete Bibliotheken in einem einzigen Package zusammengefasst sind. +Die Konfiguration eines Mirrors erfolgt in der settings.xml-Datei von Maven. Diese Datei befindet sich normalerweise im +Verzeichnis `~/.m2` (bei Unix/Linux) oder `%USERPROFILE%\.m2` (bei Windows). + +Hier ist ein Beispiel, wie ein Mirror in der settings.xml konfiguriert werden kann: + +```xmlmarkdown.md + + + + my-internal-repo + My Internal Repository + http://my.internal.repo/repository/maven-public/ + * + + + +``` + +### Repository und Deployment + +Artefakte, welche mit Maven gebildet werden, kommen zuerst in ein lokales Repository. Von dort können sie dann wieder +verwendet werden (z.B. für Testing). Will man eine Version auch anderen Entwicklern zur Vefügung stellen, kann man das +Projekt deployen. Dazu muss man aber zuerst ein Repository konfigurieren, damit Maven weiss, wohin die Artefakte sollen. + +Da das Deployment projektspezifisch ist, erfolgt die Konfiguration für das Repository im `pom.xml`: + +```xmlmarkdown.md + + + ... + + + + remoteRepository + file:///C:/Development/Repository + + + +``` + +Im obigen Beispiel wurde ein lokales Repository konfiguriert. Die `url` kann auch auf einen Remote Server verweisen +(Maven Central, JFrog Artifactery, Azure Artifacts, ...). + +Falls der Zugriff auf ein Repository eine Berechtigung benötigt, wird diese im `settings.xml` abgelegt: + +```xmlmarkdown.md + + + + + remoteRepository + your-username + your-password + + + +``` -Ein weiteres Beispiel für eine Abhängigkeit ist [Lombok](../lombok). Diese Library wird in einem eigenen Kapitel ausführlich beschrieben. +> > Das speichern von Zugangsdaten in `settings.xml` stellt sicher, dass diese nicht in ein Code Repository gelangen und so +> > in falsche Hände geraten können. ### Commands -Maven lässt sich auf der Kommandozeile oder im IntelliJ-Terminal ausführen. Damit wir sehen, ob das wirklich klappt, kannst du das Terminal öffnen und den folgenden Befehl eingeben: +Maven lässt sich auf der Kommandozeile oder im IntelliJ-Terminal ausführen. Damit wir sehen, ob das wirklich klappt, +kannst du das Terminal öffnen und den folgenden Befehl eingeben: ```console mvn -version @@ -358,7 +478,8 @@ mvn compile ``` Kompiliert den Sourcecode je nach Abhängigkeit von Plugins. -Wenn also beispielsweise ein Maven-Compiler-Plugin verwendet wird, so wird dieses als Regelwerk für die Kompilierung herangezogen. +Wenn also beispielsweise ein Maven-Compiler-Plugin verwendet wird, so wird dieses als Regelwerk für die Kompilierung +herangezogen. #### test @@ -374,7 +495,8 @@ Führt alle Tests aus. In einem Java-Projekt sind dies beispielsweise alle Unit- mvn package ``` -Führt einen lokalen Maven-Build aus, startet alle Tests und paketiert die Anwendung (normalerweise als JAR) in das Verzeichnis "target". +Führt einen lokalen Maven-Build aus, startet alle Tests und paketiert die Anwendung (normalerweise als JAR) in das +Verzeichnis "target". #### verify @@ -382,7 +504,8 @@ Führt einen lokalen Maven-Build aus, startet alle Tests und paketiert die Anwen mvn verify ``` -Prüft die Testergebnisse aller ausgeführten Integrationstests, normalerweise wird das Maven-Failsafe-Plugin für diesen Maven-Befehl vorausgesetzt. +Prüft die Testergebnisse aller ausgeführten Integrationstests, normalerweise wird das Maven-Failsafe-Plugin für diesen +Maven-Befehl vorausgesetzt. #### install @@ -398,7 +521,8 @@ Lädt das Artefakt in dein lokales Maven-Repository (dies findest du typischerwe mvn install -DskipTests ``` -Mit dem Parameter `-DskipTests` kannst du die Ausführung der Tests während der Installation überspringen, um Zeit zu sparen. Der Parameter kann auch bei anderen Aktionen wie `compile`, `package` usw. verwendet werden. +Mit dem Parameter `-DskipTests` kannst du die Ausführung der Tests während der Installation überspringen, um Zeit zu +sparen. Der Parameter kann auch bei anderen Aktionen wie `compile`, `package` usw. verwendet werden. #### deploy @@ -422,4 +546,7 @@ Selbstverständlich gibt es sehr viele zusätzliche Optionen für die einzelnen --- -![hint-gradle](/images/hint.png) (Optional) **Gradle**: Als Alternative zu Maven wird oft auch das Build-System [Gradle](https://docs.gradle.org/) eingesetzt. Unter [Building Java Applications Sample](https://docs.gradle.org/current/samples/sample_building_java_applications.html) kannst du dir einen ersten Eindruck verschaffen. +![hint-gradle](/images/hint.png) (Optional) **Gradle**: Als Alternative zu Maven wird oft auch das Build-System +[Gradle](https://docs.gradle.org/) eingesetzt. Unter +[Building Java Applications Sample](https://docs.gradle.org/current/samples/sample_building_java_applications.html) +kannst du dir einen ersten Eindruck verschaffen. diff --git a/content/en/docs/tools/personal_bitbucket_repo.md b/content/en/docs/tools/personal_bitbucket_repo.md index 08bca54fa..597089266 100644 --- a/content/en/docs/tools/personal_bitbucket_repo.md +++ b/content/en/docs/tools/personal_bitbucket_repo.md @@ -71,7 +71,8 @@ Repository hast, womit du auch ohne Internetverbindung arbeiten kannst. 3. Nach dem Login wirst du oben rechts ein, vermutlich, noch leeres Profil-Bild sehen. Klicke darauf und wähle **View Profile** (Profil anzeigen) aus: ![View Profile](../bitbucket/bitbucket_view_profile.png) 4. Auf deiner Profilseite, klickst du nun den **Create repository** (Neues Repository erstellen) Button. -5. Gib im geöffneten Formular deinem Repository einen Namen (z.B. "ausbildungsprogramm") und lasse die andere Felder leer. Anschliessend klicke auf **Create Repository** (Repository erstellen). +5. Gib im geöffneten Formular deinem Repository einen Namen. Grundsätzlich ist der Name frei wählbar, aber wir empfehlen etwas in der Form von "IT-Ninjas-{jahr}-{vorname}{name}" zu nutzen, wobei für {jahr} das aktuelle Jahr eingesetzt wird, {vorname} ersetzt Du durch Deinen Vornamen und {name} durch Deinen Namen. Das erleichtert uns die Zusammenarbeit. Lasse die andere Felder leer. +6. Anschliessend klicke auf **Create Repository** (Repository erstellen). Bitbucket erstellt nun das Repository für dich und du wirst automatisch zu deinem, noch leeren, Repository geführt. Herzliche Gratulation! Du hast soeben dein erstes Git-Repository erstellt. diff --git a/content/en/labs/java/maven/01_AddMavenAsProject.png b/content/en/labs/java/maven/01_AddMavenAsProject.png new file mode 100644 index 000000000..54b85b3ff Binary files /dev/null and b/content/en/labs/java/maven/01_AddMavenAsProject.png differ diff --git a/content/en/labs/java/maven/01_Exercises.md b/content/en/labs/java/maven/01_Exercises.md index 148709c31..1f8582ddf 100644 --- a/content/en/labs/java/maven/01_Exercises.md +++ b/content/en/labs/java/maven/01_Exercises.md @@ -7,23 +7,38 @@ description: > Aufgaben zu Modul #S2 - [Maven](../../../../docs/java/maven) --- -## Auftrag +## Vorbereitung -### Einrichten von Maven +### Repository und Maven Mirror einrichten -- Generierung REPOSITORY_KEY -- Aufsetzen settings.xml -- IntelliJ Einstellungen überprüfen -- Umgebungsvariable einstellen +{{< SBBOnly >}} +Falls du nicht in Ausbildung bei der SBB bist und deinen Code in einem Repository ablegen möchtest, musst du dir ein +eigenes Repository eröffnen, z.B. auf [BitBucket](https://bitbucket.org/), [GitHub](https://github.com/) oder +[Azure](https://azure.microsoft.com/en-us/products/devops/). +{{< /SBBOnly >}} + +1. Erstelle ein neues + [persönliches Repository](../../../../docs/tools/personal_bitbucket_repo/#persönliches-bitbucket-repository-einrichten) +2. Klone das neue Repository mit IntelliJ IDEA + + ![Create Project from Version Control](../02_NewProjectFromVersionControl.png) + + ![Create Project from Version Control Dialog](../03_NewProjectFromVersionControlDialog.png) + +3. Richte das Repository ein, wie auf [code.sbb.ch](https://code.sbb.ch/) beschrieben (nachdem man das Repo erstellt hat) +4. Optional: Konfigure den [Maven Mirror von SBB](https://bin.sbb.ch/artifactory/mvn) + +> Achtung: Der [Maven Mirror von SBB](https://bin.sbb.ch/artifactory/mvn) ist nur im VPN erreichbar. Mit konfiguriertem +> [Maven Mirror von SBB](https://bin.sbb.ch/artifactory/mvn) kann es beim Builden zu Problemen kommen, wenn man nicht +> mit dem VPN verbunden ist. ### Maven-Projekt aufsetzen -Erstellen eines neuen Projekts, welches wir später für das Modul Unit-Testing verwenden werden. +Erstelle ein neues Projekt, welches wir später für das Modul Unit-Testing verwenden werden. -1. Erstellen eines neuen persönlichen Repositories auf code.sbb.ch, der Name kann frei gewählt werden -2. Klonen des neuen Repositories mit IntelliJ IDEA -3. Repository einrichten, wie auf code.sbb.ch beschrieben (nachdem man das Repo erstellt hat) -4. Im IntelliJ die für Maven erforderliche Ordnerstruktur erstellen +1. Erstelle in IntelliJ IDEA die für Maven erforderliche Ordnerstruktur: + - Im Root-Verzeichnis des Repositories eine [.gitignore Datei](../../../docs/git/basics/git-basics/#gitignore), + angepasst für ein IntelliJ Maven Projekt. - Ordner src erstellen - Im Ordner src zwei Ordner erstellen: main und test - In den beiden Ordnern main und test jeweils zwei weitere Ordner erstellen: java und resources @@ -32,7 +47,7 @@ Erstellen eines neuen Projekts, welches wir später für das Modul Unit-Testing - src/main/resources -> Resources Root - src/test/java -> Test Sources Root - src/test/resources -> Test Resources Root -5. Am Root des Projektes eine Datei mit dem Namen pom.xml anlegen und den folgenden Inhalt einfügen: +2. Lege im Root des Projektes eine Datei mit dem Namen pom.xml an und füge den folgenden Inhalt ein: ```xml @@ -48,7 +63,7 @@ Erstellen eines neuen Projekts, welches wir später für das Modul Unit-Testing UTF-8 - Java-Version wählen + Java-Major-Version wählen, z.B. 21 yyyy-MM-dd HH:mm ${maven.build.timestamp} @@ -134,14 +149,89 @@ Erstellen eines neuen Projekts, welches wir später für das Modul Unit-Testing ``` -6. Passe die GroupID und ArtifactID gemäss der Theorie an. Dabei könntest du für die GroupID ch.sbb.{dein_name} und für die ArtifactID die aktuelle Aufgabe wählen, also zum Beispiel `ch.sbb.johncarmack:J5`. -7. Das Projekt im IntelliJ als Maven-Projekt hinterlegen, zu diesem Zweck Ctrl+Shift+A drücken und als Aktion "Maven" eintragen.
- Aus der Liste dann entweder "Add as Maven Project" oder "Add Maven Projects" wählen.
- Bei der ersten Aktion wird das Projekt direkt hinzugefügt, bei der zweiten muss das pom.xml noch ausgewählt werden -8. Auf der rechten Seite in IntelliJ gibt es den Tab Maven, dort müsste das Projekt nun erscheinen. +3. Passe die GroupID und ArtifactID gemäss der Theorie an. Dabei kannst du für die GroupID ch.sbb.{dein_name} und für + die ArtifactID die aktuelle Aufgabe wählen, also zum Beispiel `ch.sbb.johncarmack:J5`. +4. Passe die Java Version an: `Java-Major-Version wählen, z.B. 21`. Mit dem Befehl + `mvn --version` oder `java --version` findest du heraus, welche Version verwendet wird (Achtung, als Version nur die + erste Zahl von der Version nehmen). +5. Hinterlege das Projekt im IntelliJ als Maven-Projekt. Zu diesem Zweck Ctrl+Shift+A drücken und unter Aktion nach + "Maven" suchen. + + Aus der Liste dann entweder "Add as Maven Project" oder "Add Maven Projects" wählen. + + Bei der ersten Aktion wird das Projekt direkt hinzugefügt, bei der zweiten muss das pom.xml noch ausgewählt werden. + + ![Maven Projekt hinterlegen](../01_AddMavenAsProject.png) + +6. Auf der rechten Seite in IntelliJ gibt es den Tab Maven, dort müsste das Projekt nun erscheinen. Wenn alles geklappt hat, dann werden die definierten Abhängigkeiten aus dem POM in das lokale Repository heruntergeladen. +
+MAVEN Troubleshoot + +Es kann sein, dass nach Ctrl+Shift+A und dem Auswählen als Maven Project der Maven Tab rechts nicht erscheint. Der Grund +wird wahrscheinlich ein Fehler im pom.xml sein. + +Um den Fehler zu finden kannst du in IntelliJ eine Konsole öffnen und dort den Befehl `mvn install clean -e` ausführen. +Das `-e` gibt zusätzliche Informationen in der Konsole aus, falls es ein Problem gibt. + +
+ +## Aufgaben + +### Aufgabe 1 - Warnungen behandeln + +Mit dem folgenden Befehl kannst Du die Maven Umgebung so aufsetzen, wie sie im pom.xml definiert ist: + +``` +mvn clean install -e +``` + +Dabei wirst Du womöglich feststellen, dass es mehrere Warnings gibt. + +Schau Dir die Warnings an und passe das pom.xml an, damit die Warnings nicht mehr kommen. Falls Du nicht weisst, welche +Version Du für eine Dependency oder ein Plugin nehmen sollst, kannst Du im [Maven Repository](https://mvnrepository.com/) +nachschauen gehen. + +### Aufgabe 2 - Dependencies aktualisieren + +Im pom.xml wird z.B. `org.junit.jupiter:junit-jupiter` in der Version 5.6.2 verwendet. Diese ist aus dem Jahr 2020 und +hat zahlreiche Verbesserungen erfahren. Auch die anderen Dependencies sind schon recht alt. + +Aktualisiere alle Dependencies mit Hilfe des Plugins `org.codehaus.mojo:versions-maven-plugin`: + +- Installiere das Plugin in der pom.xml, den Xml-Code für das Plugin findest du im Maven Repository. + +- Mit der Standard Konfiguration werden die Dependencies auf die aktuellste Version aktualisert. Das kann auch ein + Snapshot oder ein Version mit Qualifier sein. Um nur Releases zu berücksichtigen kannst du folgende Konfiguration zum + `org.codehaus.mojo:versions-maven-plugin` Plugin hinzufügen (damit werden alle Versionen ignoriert, welche ein '-' + enthalten): + + ``` + + .*-.* + + ``` + +- Mit dem folgenden Befehl kannst du testen, wie ein Update aussehen würde: + + ``` + mvn versions:display-dependency-updates + ``` + +- Wenn du mit dem Resultat zufrieden bist, die pom.xml mit folgendem Befehl aktualisieren: + ``` + mvn versions:use-latest-versions + ``` + +### Aufgabe 3 - Remote Repository einrichten + +- Erstelle auf deinem Rechner ein Verzeichnis (z.B. unter `C:\Development\Repository`) + +- passe die Einstellungen in deinem Projekt so an, dass beim Befehl `mvn -deploy` das Artefakt von deinem Projekt in + den zuvor erstellten Ordner erstellt wird. + --- Hier kannst du [zurück zur Theorie](../../../../docs/java/maven). diff --git a/content/en/labs/java/maven/02_NewProjectFromVersionControl.png b/content/en/labs/java/maven/02_NewProjectFromVersionControl.png new file mode 100644 index 000000000..226936d8c Binary files /dev/null and b/content/en/labs/java/maven/02_NewProjectFromVersionControl.png differ diff --git a/content/en/labs/java/maven/03_NewProjectFromVersionControlDialog.png b/content/en/labs/java/maven/03_NewProjectFromVersionControlDialog.png new file mode 100644 index 000000000..8b06f6d47 Binary files /dev/null and b/content/en/labs/java/maven/03_NewProjectFromVersionControlDialog.png differ diff --git a/layouts/shortcodes/SBBOnly.html b/layouts/shortcodes/SBBOnly.html new file mode 100644 index 000000000..7d85265fc --- /dev/null +++ b/layouts/shortcodes/SBBOnly.html @@ -0,0 +1,4 @@ +
+ Die nachfolgenden Informationen in diesem Abschnitt richten sich an Auszubildende der SBB
+ {{ .Inner | markdownify }} +