Modulare Konsolenanwendung

tahlon

Mitglied
Hallo zusammen!
Ich würde gerne eine Konsolenanwendung schreiben, die abhängig von vorhandenen JARs reagiert.

Beispiel:
java -jar Anwendung.jar -t="Das ist ein Beispiel"

In einem definierten Verzeichnis befindet sich eine toUpper.jar, Ausgabe:
DAS IST EIN BEISPIEL

Füge ich toLower.jar hinzu und führe die Anwendung erneut aus:
DAS IST EIN BEISPIEL
das ist ein beispiel

Und so weiter. Könntet ihr mir einen Tipp geben wie ich vorgehen sollte? Einfach grob 2,3 Hinweise wären nett, ich erwarte keine vollständige Lösung.
 

tahlon

Mitglied
Am besten, du zeigst uns mal den Code

Es gibt noch keinen Code. Aber prinzipiell wäre ich mit dem zufrieden, was ich als Beispiel angegeben habe.
Anwendung.jar mit einer Main Methode die allen verfügbaren JARs im definierten Verzeichnis die Argumente weiterleitet.

Edit: Hinzufügen sollte ich vllt. noch, dass ich etwas derartiges eben stumpf über getRuntime().exec gebastelt habe - was sich aber nicht gut anfühlt und sicher nicht der richtige Weg ist. Daraufhin habe ich mir ein OSGi Beispiel angesehen und "nachgebastelt", was aber nach Overkill für meine Anforderung riecht. Vermutlich suche ich also nach etwas dazwischen.
 
Zuletzt bearbeitet:
G

gman

Gast
Junge Junge,

da haste dir aber was vorgenommen ;-) Also erstmal müsste in den Jars ja jeweils eine Klasse mit einer bestimmten
Methode sein, damit die Main-Klasse weiß wie sie diese aufrufen kann. Das kann man ja über ein Interface regeln.
Dann musste natürlich rausfinden welche Jars in dem Arbeitsverzeichnis der Anwendung sind und ob diese das
Interface enthalten, das wird wohl der schwierigste Teil werden. Schau dafür mal nach JarUrlClassloader (so heisst
das Ding glaub ich) und Reflection im allgemeinen.

Viel Spaß bei der Aufgabe ;-)
 

stareagle

Mitglied
Moin,

möglicherweise ist der ServiceLoader was für dich. Kurz gefasst bedeutet das folgendes:
  • Du musst ein Interface definieren
  • Die Implementierungen dieses Interfaces müssen im Classpath liegen
  • In META-INF/services muss in jedem JAR, das eine Implementierung bereitstellt eine entsprechende Datei liegen

Dann kannst du dir über die entsprechenden Methoden von ServiceLoader die Implementierungen besorgen, und führst die jeweilige Methode aus.

Gruß

Stareagle
 

kama

Top Contributor
Hallo,

würde etwas dagegen sprechen, eine Konsolenanwendung so zu schreiben, dass an ein einziges JAR entsprechend "Kommandos" übergeben werden?

Code:
java -jar console.jar Kommando Parameter

z.B.
Code:
java -jar console.jar upper -t"Der Test"
oder
Code:
java -jar console.jar lower -t"Der Test"

Gruß
Karl Heinz Marbaise
 

Ähnliche Java Themen


Oben