Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Maven build ermöglichen und automatisieren #614

Open
wants to merge 34 commits into
base: master
Choose a base branch
from

Conversation

tobidope
Copy link

@tobidope tobidope commented Jan 27, 2025

Mit diesem PR wird der build von JVerein von ant auf Maven umgestellt.

Um den Build mit Maven durchzuführen, sind folgende Schritte notwendig:

  1. mvn -f setup-build.xml initialize ausführen
    In diesem Schritt werden die Quelltexte von Jameica und Hibiscus aus GitHub heruntergeladen, entpackt und gebaut. Die für JVerein benötigten Bibliotheken aus Jameica, Hibiscus und JVerein werden anschließend in das lokale Maven-Repository installiert und stehen damit im eigentlichen Build zur Verfügung. Außerdem wird die Abhängigkeit zu NumericalChameleon von Sourceforge gezogen und verfügbar gemacht.

  2. mvn clean package ausführen
    Im Maven-Build werden die Abhängigkeiten nicht mehr aus den lib Ordnern bezogen, sondern ausschließlich aus dem lokalen oder dem zentralen Maven-Repository. Das Ergebnis ist eine Plugin-ZIP, die analog zum früheren Ant-Build erstellt wird. Sourcen, Tests und Ressourcen sind noch an alter Stelle. Es wäre allerdings sinnvoll nach einem Umstieg auf den Maven Standard umzustellen.

Der größte Vorteil besteht für mich darin, dass neue Entwickler:innen, die an JVerein mitarbeiten möchten, weniger manuelle Schritte durchführen müssen und mit einem zeitgemäßen Build-Tool arbeiten können. Dinge wie das Encoding oder die JDK-Version werden automatisch geprüft. In Zukunft könnten wir weitere Maven-Plugins verwenden, um den Entwicklungsprozess weiter zu vereinfachen.

Der ganze build Prozess wird wesentlich vereinfacht und enthält keine dynamischen Abhängigkeiten. Ein neues Release von Hibiscus oder Jameica führt nicht dazu, dass alte Versionen auf einmal nicht mehr bauen. Zudem ist der build schneller, da das caching nur noch die benötigten Abhängigkeiten nutzt. Der Cache schrumpft von 200 MB auf 90 MB.

Bitte testet den Ablauf und gebt eine Rückmeldung, ob dieser PR gemergt werden kann. Die Anbindung an GitHub Actions bringe ich gerade zuende.

@tobidope tobidope requested review from mbmueller and NicoB77 January 27, 2025 20:39
@tolot27
Copy link
Member

tolot27 commented Jan 27, 2025

Geht der maven build ohne Änderung der Verzeichnisstruktur? Das würde den PR deutlich übersichtlicher machen. Es ist ohnehin ein Refactoring geplant. Das wollen wir jedoch schrittweise angehen.

@tobidope
Copy link
Author

Kann ich probieren. Macht den build initial komplex, da in src/ Code und Ressourcen liegen. Das würde dann erstmal ein bisschen zaubern müssen.

Copy link
Member

@tolot27 tolot27 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Kannst du die file permission changes (100755 → 100644) bitte in einen separaten PR auslagern? Ich halte sie schon für sinnvoll und wir sollten sie unabhängig von diesem PR mergen. Ich hatte schon geschaut, ob es dafür einen Commit gibt. Leider konnte ich keinen identifizieren, zumindest nicht anhand der commit message.

Dann sind auch noch ein paar Dateien geändert, die glaub ich nichts mit maven zu tun haben (z. B. MitgliedLastschriftAction.java). Ich nehme an, dass du da EOL von Windows zu Unix geändert hast, oder?
Bitte das auch in einen separaten Commit packen und gern auch in vorgenannten PR auslagern.

@tobidope
Copy link
Author

Diese Anpassungen sind ungewollt passiert, weil ich unter Windows mit Intellij und vermutlich mit einer unpassenden gitconfig arbeite. Ich schaue mal, ob ich es entfernen kann.

@tobidope
Copy link
Author

So besser?

Copy link
Member

@tolot27 tolot27 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Könntest du bitte in der PR-Beschreibung (erster Kommentar) noch ergänzen, wie die Verzeichnisstruktur dann aussieht und was sich am GitHub Actions Workflow ändert (z. B. Caching)?

Ich sehe als Hauptvorteil von Maven, dass wir die Libs aus dem Git Repository entfernen können. Die liegen dann nur noch im local repository. Allerdings entfernt dieser PR sie noch nicht. Das könntest du noch ergänzen.

Oder ist erstmal gedacht, maven nur side-by-side zu verwenden? Dann dürfte der GitHub Actions Workflow jedoch nicht so stark abgeändert werden. Wie ist hier die Intention?

Comment on lines -20 to -22
jameica_tag=$(git ls-remote --refs --tags --sort="-v:refname" https://github.com/willuhn/jameica.git V_\* | head -1 | cut -f 2 | cut -d / -f 3)
echo "jameica_tag=${jameica_tag}" >> $GITHUB_ENV
hibiscus_tag=$(git ls-remote --refs --tags --sort="-v:refname" https://github.com/willuhn/hibiscus.git V_\* | head -1 | cut -f 2 | cut -d / -f 3)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hier bestimmen wir die aktuellen release tags dynamisch. In der POM hast du sie hart kodiert. Kann man das auch dynamisieren? Sonst verlieren wir wieder Flexibilität.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Das macht den build aber nicht wiederholbar, da er vom Zustand externer Quellen abhängt. Ich würde vorschlagen renovate einzubauen und sehr bewusst die genutzte Version zu aktualisieren.

pom.xml Outdated Show resolved Hide resolved
pom.xml Outdated

<groupId>io.github.openjverein</groupId>
<artifactId>jverein</artifactId>
<version>2.8.24-SNAPSHOT</version>
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Das müsste auch irgendwie dynamisiert werden. Wir sind ja gerade bei 2.9.0-nightly

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Gibt das maven-release-plugin dafür. Habe ich noch nicht eingebaut. Wie wird jetzt hochgezählt?

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-install-plugin</artifactId>
<version>3.1.3</version>
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ich glaub diese Versionen lassen sich auch zentraler konfigurieren. Zumindest geht das bei Gradle.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ja, ich würde aber vorschlagen renovate einzubauen. Das stellt einem automatisch prs mit neuen Versionen zu den plugins.

setup-build.xml Show resolved Hide resolved
Comment on lines +214 to +217
# Eclipse Core
.project
# JDT-specific (Eclipse Java Development Tools)
.classpath
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Diese Dateien würde ich noch nicht gleich ignorieren. Nicht jeder wird sofort Maven verwenden.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Dies sind bereits drin, aber ich kann es gerne wieder rausschmeißen. Mit Maven Projekten ist aber eher schlechter Stil den .classpath im workspace drin zu lassen, da man dann zwei Wahrheiten hat.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Mit Maven und dem m2e plugin kann man sie eigentlich nicht miteinchecken.

.github/workflows/reusable-build.yml Show resolved Hide resolved
@tobidope
Copy link
Author

Könntest du bitte in der PR-Beschreibung (erster Kommentar) noch ergänzen, wie die Verzeichnisstruktur dann aussieht und was sich am GitHub Actions Workflow ändert (z. B. Caching)?

Werde ich noch ergänzen.

Ich sehe als Hauptvorteil von Maven, dass wir die Libs aus dem Git Repository entfernen können. Die liegen dann nur noch im local repository. Allerdings entfernt dieser PR sie noch nicht. Das könntest du noch ergänzen.

Oder ist erstmal gedacht, maven nur side-by-side zu verwenden? Dann dürfte der GitHub Actions Workflow jedoch nicht so stark abgeändert werden. Wie ist hier die Intention?

Ich würde es komplett ändern wollen, würde mir aber wünschen, dass es jemand mal lokal bei sich ausprobiert. Dann würde ich die libs rausschmeißen. Alle können nicht raus, da z.B. nc.jar nicht via Maven herunterladbar ist und diese Version nicht im Internet existier.

@tobidope tobidope requested a review from tolot27 January 29, 2025 18:15
@@ -1,7 +1,7 @@
<plugin xmlns="https://www.willuhn.de/schema/jameica-plugin"
xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://www.willuhn.de/schema/jameica-plugin https://www.willuhn.de/schema/jameica-plugin-1.5.xsd"
name="jverein" version="2.9.0" class="de.jost_net.JVerein.JVereinPlugin">
name="jverein" version="${project.version}" class="de.jost_net.JVerein.JVereinPlugin">
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Dann funktioniert aber die "AboutView" Ausgabe der Version wie in #325 angepasst und damals gefordert nicht mehr.

Copy link
Author

@tobidope tobidope Jan 30, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Wenn man es mit maven package baut, wird mit dem ressource plugin die plugin.xml gefiltert und enthält dann im jverein-<version>.zip die korrekte Version. In Maven wird man die Version nur einer Stelle pflegen, in der pom.xml. Alles andere wird beim build erzeugt und nutzt die Daten der pom.xml. So wird sichergestellt, dass es keine Inkonsistenzen gibt. Aber das Starten aus dem workspace passt dann nicht, man müsste das plugin.zip entpacken und als plugin verzeichnis für jameica nutzen. Es separat zu verwalten, fände ich schwierig. Du kannst in meinem repo mal ein release anschauen https://github.com/tobidope/jverein/releases/tag/2.9.0-SNAPSHOT. Dort müsste alles passen.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Es wäre eine Option ein profil lokal zu aktivieren z.B. local-test, dass die plugin.xml für den Test generiert. Die Basis dafür wäre ein plugin.xml aus den src/main/resources.

@tobidope tobidope requested a review from dippeal January 30, 2025 19:21
@tobidope
Copy link
Author

Soll ich hier weitermachen, oder ist eine Aufnahme eher unwahrscheinlich?

tobidope and others added 11 commits January 31, 2025 18:37
� Conflicts:
�	src/de/jost_net/JVerein/gui/action/NichtMitgliedSucheAction.java
�	src/main/java/de/jost_net/JVerein/DBTools/DBTool.java
�	src/main/java/de/jost_net/JVerein/DBTools/DBTool2.java
�	src/main/java/de/jost_net/JVerein/gui/action/AbrechnungSEPAAction.java
�	src/main/java/de/jost_net/JVerein/gui/action/AbrechnunslaufListAction.java
�	src/main/java/de/jost_net/JVerein/gui/action/AbschreibungsListeAction.java
�	src/main/java/de/jost_net/JVerein/gui/action/AdministrationEinstellungenAbrechnungAction.java
�	src/main/java/de/jost_net/JVerein/gui/action/AdministrationEinstellungenAllgemeinAction.java
�	src/main/java/de/jost_net/JVerein/gui/action/AdministrationEinstellungenAnzeigeAction.java
�	src/main/java/de/jost_net/JVerein/gui/action/AdministrationEinstellungenBuchfuehrungAction.java
�	src/main/java/de/jost_net/JVerein/gui/action/AdministrationEinstellungenDateinamenAction.java
�	src/main/java/de/jost_net/JVerein/gui/action/AdministrationEinstellungenMailAction.java
�	src/main/java/de/jost_net/JVerein/gui/action/AdministrationEinstellungenMitgliedAnsichtAction.java
�	src/main/java/de/jost_net/JVerein/gui/action/AdministrationEinstellungenMitgliederSpaltenAction.java
�	src/main/java/de/jost_net/JVerein/gui/action/AdministrationEinstellungenRechnungenAction.java
�	src/main/java/de/jost_net/JVerein/gui/action/AdministrationEinstellungenSpendenbescheinigungenAction.java
�	src/main/java/de/jost_net/JVerein/gui/action/AdministrationEinstellungenStatistikAction.java
�	src/main/java/de/jost_net/JVerein/gui/action/AnfangsbestandListAction.java
�	src/main/java/de/jost_net/JVerein/gui/action/AnlagenlisteAction.java
�	src/main/java/de/jost_net/JVerein/gui/action/ArbeitseinsaetzeListeAction.java
�	src/main/java/de/jost_net/JVerein/gui/action/ArbeitseinsatzUeberpruefungAction.java
�	src/main/java/de/jost_net/JVerein/gui/action/AuswertungAdressenAction.java
�	src/main/java/de/jost_net/JVerein/gui/action/AuswertungKursteilnehmerAction.java
�	src/main/java/de/jost_net/JVerein/gui/action/AuswertungMitgliedAction.java
�	src/main/java/de/jost_net/JVerein/gui/action/BackAction.java
�	src/main/java/de/jost_net/JVerein/gui/action/BeitragsgruppeSucheAction.java
�	src/main/java/de/jost_net/JVerein/gui/action/BuchungsListeAction.java
�	src/main/java/de/jost_net/JVerein/gui/action/BuchungsartListAction.java
�	src/main/java/de/jost_net/JVerein/gui/action/BuchungsklasseListAction.java
�	src/main/java/de/jost_net/JVerein/gui/action/BuchungsklasseSaldoAction.java
�	src/main/java/de/jost_net/JVerein/gui/action/DbBereinigenAction.java
�	src/main/java/de/jost_net/JVerein/gui/action/EigenschaftGruppeListeAction.java
�	src/main/java/de/jost_net/JVerein/gui/action/EigenschaftListeAction.java
�	src/main/java/de/jost_net/JVerein/gui/action/FamilienbeitragAction.java
�	src/main/java/de/jost_net/JVerein/gui/action/FelddefinitionenAction.java
�	src/main/java/de/jost_net/JVerein/gui/action/FormularListeAction.java
�	src/main/java/de/jost_net/JVerein/gui/action/FreieFormulareAction.java
�	src/main/java/de/jost_net/JVerein/gui/action/JahresabschlussListAction.java
�	src/main/java/de/jost_net/JVerein/gui/action/JubilaeenAction.java
�	src/main/java/de/jost_net/JVerein/gui/action/KontensaldoAction.java
�	src/main/java/de/jost_net/JVerein/gui/action/KontoListAction.java
�	src/main/java/de/jost_net/JVerein/gui/action/KursteilnehmerSucheAction.java
�	src/main/java/de/jost_net/JVerein/gui/action/LastschriftListAction.java
�	src/main/java/de/jost_net/JVerein/gui/action/LehrgaengeListeAction.java
�	src/main/java/de/jost_net/JVerein/gui/action/LehrgangsartListeAction.java
�	src/main/java/de/jost_net/JVerein/gui/action/LizenzAction.java
�	src/main/java/de/jost_net/JVerein/gui/action/MailListeAction.java
�	src/main/java/de/jost_net/JVerein/gui/action/MailVorlagenAction.java
�	src/main/java/de/jost_net/JVerein/gui/action/MitgliedMigrationAction.java
�	src/main/java/de/jost_net/JVerein/gui/action/MitgliedSucheAction.java
�	src/main/java/de/jost_net/JVerein/gui/action/MitgliedstypListAction.java
�	src/main/java/de/jost_net/JVerein/gui/action/MittelverwendungListeAction.java
�	src/main/java/de/jost_net/JVerein/gui/action/NichtMitgliedSucheAction.java
�	src/main/java/de/jost_net/JVerein/gui/action/ProjektListAction.java
�	src/main/java/de/jost_net/JVerein/gui/action/ProjektSaldoAction.java
�	src/main/java/de/jost_net/JVerein/gui/action/QIFBuchungsImportViewAction.java
�	src/main/java/de/jost_net/JVerein/gui/action/QIFMitgliederAction.java
�	src/main/java/de/jost_net/JVerein/gui/action/RechnungListeAction.java
�	src/main/java/de/jost_net/JVerein/gui/action/SollbuchungListeAction.java
�	src/main/java/de/jost_net/JVerein/gui/action/SollbuchungMahnungAction.java
�	src/main/java/de/jost_net/JVerein/gui/action/SollbuchungRechnungMailAction.java
�	src/main/java/de/jost_net/JVerein/gui/action/SpendenAction.java
�	src/main/java/de/jost_net/JVerein/gui/action/SpendenbescheinigungAutoNeuAction.java
�	src/main/java/de/jost_net/JVerein/gui/action/SpendenbescheinigungListeAction.java
�	src/main/java/de/jost_net/JVerein/gui/action/StartViewAction.java
�	src/main/java/de/jost_net/JVerein/gui/action/StatistikJahrgaengeAction.java
�	src/main/java/de/jost_net/JVerein/gui/action/StatistikMitgliedAction.java
�	src/main/java/de/jost_net/JVerein/gui/action/WiedervorlageListeAction.java
�	src/main/java/de/jost_net/JVerein/gui/action/ZusatzbetraegeListeAction.java
�	src/main/java/de/jost_net/JVerein/gui/parts/BuchungListPart.java
�	src/main/java/de/jost_net/JVerein/gui/parts/SollbuchungPositionListPart.java
�	src/main/java/de/jost_net/JVerein/gui/view/SpendenView.java
�	src/main/java/de/jost_net/JVerein/io/ATBank.java
�	src/main/java/de/jost_net/JVerein/io/ATBankdatei.java
�	src/main/java/de/jost_net/JVerein/io/Adressbuch/LDIF.java
�	src/main/java/de/jost_net/JVerein/util/JVDateFormatMMMM.java
# Conflicts:
#	src/de/jost_net/JVerein/gui/action/StartViewAction.java
#	src/de/jost_net/JVerein/gui/parts/BuchungListPart.java
#	src/de/jost_net/JVerein/gui/parts/SollbuchungPositionListPart.java
#	src/de/jost_net/JVerein/util/JVDateFormatMMMM.java
@tobidope tobidope added the help wanted Extra attention is needed label Feb 1, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
help wanted Extra attention is needed
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants