UtilLib: Java-Werkzeugkasten für kleine Projekte – Mitstreiter gesucht

TomBombadil

Mitglied
Hallo zusammen,

ich möchte hier mein Projekt UtilLib vorstellen und suche dafür interessierte Java-Entwickler, die Lust haben, Feedback zu geben oder langfristig mitzuwirken.

Der Download liegt hier, weil das Paket für einen direkten Upload im Forum zu groß ist:

https://my.hidrive.com/share/n39d-jnx8c

Was ist UtilLib?​

UtilLib ist eine leichtgewichtige Java-Bibliothek für kleine und mittlere Softwareprojekte.

Die Idee ist nicht, Spring, Hibernate, Jakarta EE oder andere große Frameworks zu ersetzen. UtilLib soll eher die Lücke schließen zwischen:

  • „Ich schreibe alles mit Java SE selbst“
  • und
  • „Ich ziehe direkt ein großes Framework ins Projekt“
Ziel ist ein pragmatischer Werkzeugkasten für typische Aufgaben, die in kleinen Anwendungen ständig wiederkommen:

  • sichere Fehlerbehandlung
  • Textverarbeitung
  • einfache Collections
  • Konfiguration und Parameterverwaltung
  • Datenbankzugriff
  • ObjectStore / einfache Objektpersistenz
  • Tabellenmodelle
  • später auch Druckausgabe, PDF und weitere Alltagsbausteine
Der Gedanke dahinter ist: Ein Einzelentwickler soll mit möglichst wenig Infrastruktur schnell eine brauchbare Anwendung bauen können.

Warum das Ganze?​

Ich sehe in der Praxis oft kleine Betriebe, Vereine oder Privatpersonen, die sich mit Excel-Tabellen, halb manuellen Abläufen und viel Bürokratie behelfen müssen.

Da geht schnell viel Zeit verloren. Nicht, weil die eigentliche Aufgabe kompliziert wäre, sondern weil passende kleine Software fehlt oder zu teuer ist.

Meine Vision ist, dass ein Entwickler mit UtilLib schneller kleine Fachanwendungen bauen kann, zum Beispiel:

  • Adressverwaltung für einen Verein
  • Mitgliederverwaltung
  • einfache Lager- oder Inventarlisten
  • Import und Validierung gewachsener Excel-/CSV-Daten
  • kleine Datenbankanwendungen
  • Text- und Berichtsgeneratoren
  • einfache Verwaltungswerkzeuge für Kleinbetriebe
Also Software, die nicht riesig ist, aber im Alltag echte Entlastung bringt.

Zielgruppe der Bibliothek​

UtilLib richtet sich vor allem an:

  • Einzelentwickler
  • kleine Teams
  • Lernende mit Java-Grundkenntnissen
  • Entwickler, die kleine Desktop- oder Tool-Anwendungen bauen
  • Vereinssoftware
  • kleine Betriebe
  • interne Verwaltungssoftware
  • Prototypen
Die Bibliothek soll bewusst auch für weniger erfahrene Java-Entwickler verständlich sein. Deshalb ist Dokumentation ein wichtiger Teil des Projekts. Es geht nicht nur darum, Methoden aufzulisten, sondern auch zu erklären, warum etwas so gebaut ist.

Grundprinzipien​

Einige Prinzipien sind mir besonders wichtig:

  1. Einfach nach außen, sauber nach innen
    Die API soll möglichst einfach nutzbar sein. Die interne Umsetzung darf komplexer sein, wenn dadurch die Benutzung einfacher wird.
  2. Keine unnötigen Eigenentwicklungen
    Wo etablierte Bibliotheken sinnvoll sind, sollen sie genutzt werden. UtilLib soll eher eine verständliche Fassade über bewährte Technik bieten, nicht alles neu erfinden.
  3. Explizite Fehlerbehandlung
    Statt überall null oder ungefangene Exceptions zu verwenden, gibt es eine eigene Result<T>-Klasse. Eine Methode kann damit sauber ausdrücken: erfolgreich oder fehlgeschlagen.
  4. Einsteigerfreundliche Dokumentation
    Die Dokumentation soll auch erklären, was Java-Standards wie Generics, Mapper, Prepared Statements oder Lambdas bedeuten, wenn sie in den Beispielen vorkommen.
  5. Pragmatisch bleiben
    Kein Over-Engineering. Die Bibliothek soll für reale kleine Projekte nützlich sein.

Aktueller Stand​

Es gibt bereits mehrere Module, unter anderem:

  • Result<T> für sichere Fehlerbehandlung
  • TextProcessor für Text- und Dateioperationen
  • MagicCollection als komfortable Collection
  • SimpleParamManager für einfache Parameter und Konfigurationen
  • Datenbankmodul mit H2/SQLite-Ansatz
  • ObjectStore als Komfortschicht zum Speichern von Java-Objekten
  • Tabellenmodelle
  • erste Metrik-/Analysewerkzeuge
Ein Teil ist schon nutzbar, ein Teil ist noch klar Baustelle.

Insbesondere der Storage-Bereich ist aktuell noch eine komplexere Architekturbaustelle. Genau dort wäre fachlicher Input sehr willkommen.

Eine Idee: PDF-basierter Druckdialog​

Ein Bereich, den ich langfristig spannend finde, ist ein einfacher Druckbaustein für typische Verwaltungssoftware.

Die Idee wäre ein PDF-basierter Druckdialog, umgesetzt mit JavaFX oder Swing:

  • Anwendung erzeugt intern ein PDF
  • Vorschau im Dialog
  • Drucken über Systemdrucker
  • Speichern als PDF
  • geeignet für Briefe, Listen, Etiketten, Umschläge, Zweckform-Bögen usw.
Gerade für Vereinssoftware oder kleine Bürosoftware wäre das sehr praktisch. Viele kleine Anwendungen scheitern nicht an der Datenhaltung, sondern an sauberer Ausgabe: Briefe, Adressetiketten, Listen, Formulare.

Hier wäre Input von erfahrenen Java-Entwicklern besonders interessant:

  • JavaFX oder Swing?
  • PDF-Vorschau über vorhandene Bibliothek oder externe Komponente?
  • Druckdialog als eigenes Modul?
  • sinnvolle API für Entwickler?
  • Trennung zwischen Layout, Daten und Ausgabe?

Zu mir​

Ich bin nicht der große Coder im klassischen Sinn und mein Englisch ist auch nicht besonders gut. Deshalb wäre die Projektsprache zunächst Deutsch.

Ich sehe meine Stärke eher als Ideengeber und Architekt: Ich erkenne praktische Probleme, denke gern in Systemen und möchte daraus eine Bibliothek bauen, die anderen Entwicklern echte Arbeit abnimmt.

Gerade deshalb suche ich Mitstreiter, die technisch stärker sind, kritisch auf Architektur und Code schauen und eigene Ideen einbringen möchten.

Was ich suche​

Ich suche keine reine Zustimmung, sondern ehrliches Feedback:

  • Ist die Grundidee sinnvoll?
  • Ist die API verständlich?
  • Wo ist die Architektur zu kompliziert?
  • Wo ist sie zu naiv?
  • Welche Module wären wirklich nützlich?
  • Welche Teile sollte man besser streichen?
  • Wo sollte man stärker auf bestehende Bibliotheken setzen?
  • Wie könnte man Storage sauberer aufbauen?
  • Welche Fehler sieht man im Design?
Auch neue Ideen sind ausdrücklich willkommen, solange sie zur Grundidee passen: kleine und mittlere Softwareprojekte schneller, robuster und verständlicher umsetzen.

Einordnung​

Das Projekt ist noch keine fertige, stabile Library. Eher eine aufgeräumte Basisversion mit Doku, an der man jetzt sinnvoll weiterarbeiten kann.

Ich würde mich freuen, wenn ein paar erfahrene Java-Entwickler Lust haben, reinzuschauen und Feedback zu geben.

Viele Grüße
Jan
 

Robert Zenz

Top Contributor
Ist die Grundidee sinnvoll?
Jein? Es ist schwierig ein Schweizer Taschenmesser als Bibliothek anzubieten weil es vieles nicht zusammenhaengende hat. Das ist wie quasi wie die Apache/Guave/Google Bibliotheken wo man versucht so viel wie moeglich hineinzupacken. Das fuehrt am Ende dann aber eher dazu dass Entwickler die ganze Bibliothek mit hineinziehen um nur eine Klasse zu verwenden. Ob das gut ist oder nicht ist die Frage. Was aber definitiv schlecht ist, sind die Abhaengigkeiten die die Bibliothek "einfach so" mit hinein zieht in das Projekt. Wenn ich jetzt die Datenbank-Sachen nicht verwenden will, muss ich sie dann explizit in meinem pom exkludieren. Und da ist man dann auch schon mitten drin in dem Problem wenn man versucht alles in einer "Util-Bibliothek" zu loesen, man hat zwar viele moegliche Anwendungsfaelle abgedeckt, aber um sie dann nur fuer einen davon zu verwenden ist die Bibliothek selbst wieder zu grosz. Und Nein, die Loesung ist nicht die von den JavaScript-Heinis jede Funktion in ein eigenes Paket zu packen.

Auf die Schnelle aufgefallen ist mit die Verwendung von System.out und System.err. Bibliotheken sollten immer ueber Logger gehen um den verwendenden Applikationen die Moeglichkeit zu geben Log-Ausgaben anders Hand zuhaben. Das waere das Mindeste der Java Logger. SYSOFile koennte zum Beispiel komplett ueber ein Logger-Framework abgewickelt werden.

Aber auch die Benamung. Die Namen sind nicht immer wirklich gut, zum Beispiel CheckFileLanguage ist eine Aktion, kein Objekt. Besser waere LanguageAwareFile oder LanguageNamedFile oder aehnliches. Base64Decoder luegt, es ist sowohl Encoder als auch Decoder.

Ein paar der Funktionen, zumindest bei dem Time-Sachen, sind naiv implementiert. Duration waere da die bessere Wahl um Zeitspannen zu berechnen. Das begruendet sich schlicht und ergreifend darin dass es sehr, sehr, sehr, sehr, sehr, sehr, sehr, sehr, sehr, sehr, sehr, sehr, sehr, sehr, sehr, sehr, sehr viele Eckfaelle und Sonderfaelle beim berechnen von Zeit gibt. Da sind Schalttage das geringste, das geht ueber Schaltsekunden, direkt zu Sommer/Winterzeit zu Kalendaranpassungen wo dann Monate fehlen.

Etwas viel, viel wichtigeres ist das die Bibliothek keine Lizenz hat. Ohne Lizenz ist alles "Alle Rechte Vorbehalten", oder um es salopp auszudruecken: "no looky no touchy". Und du hast bereits durch die Abhaengigkeiten ein recht guten Dschungel an Lizenzen eingesammelt. Das waere das erste was passieren muss.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Servlet-Filter in Java testen: Wie kann man Änderungen im Context vor dem Aufruf von clear() im finally-Block prüfen Frameworks - Spring, Play, Blade, Vaadin & Co 6
OnDemand JTE Java-Template-Engine Frameworks - Spring, Play, Blade, Vaadin & Co 2
Jose05 Java Anwendung, über den Browser steuern Frameworks - Spring, Play, Blade, Vaadin & Co 1
S java springboot HTML Produktstruktur Frameworks - Spring, Play, Blade, Vaadin & Co 1
G Java springboot Item mit ItemInstance verbinden Frameworks - Spring, Play, Blade, Vaadin & Co 2
thor_norsk Javac nicht vorhanden in Java-17-openjdk-amd64 Frameworks - Spring, Play, Blade, Vaadin & Co 8
padde479 Cannot invoke "java.util.Map.containsKey(Object)" because "requestMap" is null Frameworks - Spring, Play, Blade, Vaadin & Co 2
OnDemand Vaadin Pro & TypScript vs Plain Java Frameworks - Spring, Play, Blade, Vaadin & Co 4
S Java Web App oder PHP Frameworks - Spring, Play, Blade, Vaadin & Co 10
Zrebna SpringBoot-Project: java.sql.SQLSyntaxErrorException: Access denied for user 'gap3'@'%' to database '3306/gap3' Frameworks - Spring, Play, Blade, Vaadin & Co 3
L Hilfe beim Erstellen einer Java Web Anwendung gesucht Frameworks - Spring, Play, Blade, Vaadin & Co 5
8u3631984 required a bean of type 'java.lang.String' that could not be found. Frameworks - Spring, Play, Blade, Vaadin & Co 8
M Java Spring Security Frameworks - Spring, Play, Blade, Vaadin & Co 5
OnDemand Webfrontend mit Java Backend Frameworks - Spring, Play, Blade, Vaadin & Co 26
F Server-Java-Spring Websockets Frameworks - Spring, Play, Blade, Vaadin & Co 6
L Controller Spring Boot mit Java Frameworks - Spring, Play, Blade, Vaadin & Co 20
J Spring Boot Thymleaf mit Java.Optional Frameworks - Spring, Play, Blade, Vaadin & Co 0
B Java Spring Boot - POM-Problem Frameworks - Spring, Play, Blade, Vaadin & Co 8
H OAuth2 mit Spring boot und Java Frameworks - Spring, Play, Blade, Vaadin & Co 5
P Java EE vs. Spring Frameworks - Spring, Play, Blade, Vaadin & Co 2
K Spring Security für Java SE Frameworks - Spring, Play, Blade, Vaadin & Co 2
V Java (Eclipse) programmierung zum Springerproblem Frameworks - Spring, Play, Blade, Vaadin & Co 1
M Java for-Schleife überspringt eine Eingabe Frameworks - Spring, Play, Blade, Vaadin & Co 11
Java.getSkill() Gemeinsam Java Spring lernen Frameworks - Spring, Play, Blade, Vaadin & Co 17
S Senior-Softwareentwickler (m/w) Java / Spring im Raum Frankfurt Frameworks - Spring, Play, Blade, Vaadin & Co 0
MQue Meine Java Spring Appl Frameworks - Spring, Play, Blade, Vaadin & Co 0
W Java Applet aus der Taskleiste springt in Vordergrund Frameworks - Spring, Play, Blade, Vaadin & Co 3
S Java Applet:Thread.Timeout überspringt Teile des Codes Frameworks - Spring, Play, Blade, Vaadin & Co 2
S Integrations Test in Java mit Spring Frameworks - Spring, Play, Blade, Vaadin & Co 2
A Java Bean Validation und Spring Webflow Frameworks - Spring, Play, Blade, Vaadin & Co 0
Y java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener Frameworks - Spring, Play, Blade, Vaadin & Co 14
W java Spring mit db Frameworks - Spring, Play, Blade, Vaadin & Co 1
nrg Debugger springt immer in Java SE Code Frameworks - Spring, Play, Blade, Vaadin & Co 3
B Spring / Jpa / Hibernate -> java.lang.IllegalArgumentException: Unknown entity Frameworks - Spring, Play, Blade, Vaadin & Co 1
H java web anwendung auf spring 2.0 umstellen Frameworks - Spring, Play, Blade, Vaadin & Co 3

Ähnliche Java Themen


Oben