2016-04-05 10 views
3

Ich stecke mit einem Problem fest, das ich jetzt nicht für Schwache lösen kann.Funktionierendes modulares Beispiel für JavaFx8 + OSGi + Gradle Multiprojekt ohne zusätzliche Werkzeuge?

Ich muss eine modulare JavaFX-Anwendung erstellen, wobei jede Komponente eine "Domäneneinheit" (mit Modellen + Ansichten + Controller) definiert. Jede Komponente kann in eine "Shell-Anwendung" geladen werden (als Inhalt einer Registerkartenansicht oder mehrerer Registerkartenansichten) und die Module können von anderen Modulen abhängen (ihr Inhalt in Registerkarten wird nicht angezeigt, wenn ihre Abhängigkeit nicht geladen ist).

Deshalb habe ich eine OSGi basierend JavaFX Anwendung zu erstellen, wurde die Planung und bauen sie mit Gradle als Multiprojekt.

Ich habe bereits versucht, Dutzende von Tutorials ohne Erfolg und ich erlebte, dass die meisten dieser Tutorials:

  • veraltet sind, nicht reproduzierbar (zB elcipse der Schnittstelle haben Vorlagen geändert, nicht bndtools Tutorials nicht scheinen zu arbeiten, Tagundnachtgleiche scheint nicht zu arbeiten ohne felix, javafx8 + osgi erzeugen verschiedene Art von Problemen ... etc.)
  • sind zu komplex für einen Anfänger (ich habe gerade angefangen, OSGi und Gradle zu lernen) und sie Überspringe wichtige Schritte, die ich nicht kenne
  • enthalten zu viel "IDE Magie" (Ich würde lieber etwas Code anstelle von eingeben Ausfüllen von Formularen in Eclipse)
  • einige das Problem mit verschiedenen Werkzeugen (Maven/tycho, bndtools, e (fx) clipse), aber ich habe keine Zeit zu lernen, sie

Ich möchte meine Anwendung lösen unabhängig von der Umgebung der IDE sein. I nicht wollen e (fx) clipse oder BndTools verwenden, wenn möglich (auch wenn sie den Build-Prozess einfacher machen können) .. Ich experimentiere mit OSGi-Implementierungen, deshalb würde ich lieber nicht zwischen Equinox wählen , Felix oder Karaf. Ich habe schon ähnliche Anwendung in .NET-Welt programmiert, aber es scheint mir unmöglich, das gleiche in Java-Welt zu tun ..

Meine Hauptfragen sind:

  • ist es möglich, was zu tun ist I hast du dir vorgestellt?
  • Wie erstellt man ein GRADLE Multiprojekt was ist IDE/Plattform unabhängig (wenn Projekte nicht an Eclipse-Umgebung oder Tagundnachtgleiche gebunden sind, aber es möglich ist, sie zu verwenden)?
  • Was sind die besten Möglichkeiten, um die Anwendung (Shell-Anwendung + Module) zu initialisieren und die unabhängigen Module/Bundles/Komponenten zu laden?
  • Wie teile ich meine Ansichten in Teilprojekte auf (was build.gradle Dateien enthalten sollten)?
  • wie die javafx8 Inkompatibilität mit osgi zu lösen?
  • Was ist die richtige Methode, um Javafx-Plugin in Gradle anzuwenden?
  • Welche Tutorials sind am relevantesten?
  • Gibt es ein Arbeitsbeispiel, Muster oder Tutorial (ohne zusätzliche Tools), die das gleiche Problem lösen (mit nur osgi + javafx + gradle)?
+0

ich voll und ganz unterstützen Sie Ihre Anwendung wollen von IDEs unabhängig zu sein. Aber warum heißt das, dass du keine Bndtools benutzen willst? Es ist nur ein Werkzeug, Ihre Anwendung wird nicht davon abhängen. Wenn Sie Probleme mit dem Bndtools Tutorial haben, dann lassen Sie es uns bitte wissen ... nur zu sagen, dass sie nicht funktionieren, hilft uns nicht, sie zu beheben. Vielen Dank! –

Antwort

2

ich konnte Gruppe Ihre Fragen in differents Thema:

OSGI

Sie brauchen nur um Google, um herauszufinden, dass eine Java-Spezifikation ist die Modularisierung ermutigt, bietet Hot-Deploy-Funktion, und so weiter. Wie ich schon sagte, ist nur eine Spezifikation wie Java Servlet API, so dass sie verschiedene Anbieter oder Implementierer von OSGI-Spezifikation wie Felix und Equinox sind. Karaf dagegen ist ein auf Felix basierender OSGI-Container, also bekommt man alle felix-Vorteile und sucht karaf-native Features. Aus diesem Grund ermutige ich Sie, Karaf in Gebrauch zu nehmen.

Aquote BndTool

Um die OSGi-Spezifikation zu erfüllen, müssen Sie, dass Ihre Module einen MANIFEST.MF enthalten die Abhängigkeits alle Informationen enthält, so Karaf die Classloader erstellen für Ihr Bündel erforderlich. Angenommen, Sie möchten diese MANIFEST.MF-Dateien nicht manuell erstellen, können Sie aqute/bndtool dafür verwenden. Mach keine Unordnung mit bndtool für Eclipse-Plugin. Diese Anwendung kann von der Befehlszeile, von einem Maven-Plugin oder von einem Gradle-Plugin verwendet werden. Durchsucht grundsätzlich Ihre Klassen, überprüft die Importe und erstellt automatisch eine MANIFEST.MF.

Gradle

Wenn Sie gradle als Build-Tool, dann können Sie in Betrieb nehmen: Bnd Gradle plugin. Es ist einfach einzurichten, aber folgen Sie den Anweisungen für das Plugin ohne Arbeitsbereich. Wenn Sie BndTool nicht für Eclipse verwenden möchten. IDE-unabhängige Lösung, die Sie in Ihrer Frage erwähnt haben.

Multi Layout-

Wie das Projekt-Layout wie, hängt von Ihrer Modularisierung aussehen sollte, aber Sie können einen Blick auf diesem Layout Beispiel haben die gradle + osgi + karaf für ein Multiprojekt verwendet. Vielleicht inspiriert dich.

https://github.com/antoniomaria/gradle-karaf-bnd-project

Verwandte Themen