Ich möchte einen Ruby (JRuby) -Wrapper über eine mittelgroße Java-Bibliothek legen und suche nach Ratschlägen und Artikeln über Best Practices für alles von der Verpackung bis zur Strategie.
Ich fand eine relativ veraltete (2009) Diskussion zu diesem Thema hier: Ссылка .
Ich möchte die neueste Version von JRuby verwenden.
Ich habe ein paar Wrapper für Java-Bibliotheken geschrieben ( Eurydice , HotBunnies , Nachrichtenpaket , Mikka , unter anderem). Einige von ihnen sind nur JRuby-Code, der die Java-Bibliothek anpasst, und einige von ihnen enthalten Java-Code, der mit der JRuby-Laufzeitumgebung ( MessagePack ist tatsächlich komplett in Java geschrieben).
Die Sache, die ich gefunden habe, ist nicht sehr gut gelöst, wie man die JAR-Datei für die Java-Bibliothek liefert. Du willst es nicht in den Edelstein mit einbeziehen, denn dann wirst du schließlich in der JAR-Hölle landen. Gewöhnliche Java-Bibliotheken wie Netty werden in vielen Edelsteinen gebündelt und schließlich haben Sie Edelsteine, die inkompatible Versionen bündeln. Ich habe dieses Problem gelöst, indem ich Edelsteine verpackt habe, die nur die Java-Bibliothek JAR enthalten (siehe zum Beispiel scala-library-jars und ning-compress-jars ) und dann hängt mein Wrapper von diesem Juwel ab. Es ist keine besonders skalierbare Lösung, aber es wird zumindest einfacher zu verwalten sein, als wenn Sie JAR im Wrapper-Juwel bündeln.
Ihre Frage ist nicht sehr klar, was genau Sie wissen wollen, ich schlage vor, Sie zu überarbeiten und genauer zu sein. Aber hier sind ein paar zufällige Dinge von der Spitze meines Kopfes
java_import
nicht in den globalen Bereich ein. Es wird viel Ärger für alle verursachen. Denken Sie daran, dass java_import
nicht wie import
in Java ist, wo es nur lokal für die Datei ist, sondern tatsächlich einen Alias im Bereich erstellt. Wrap java_import
und include_package
in Modulen. import
- es ist nicht kompatibel mit Rake. Die Wiki-Seite: Java-Skripte von JRuby (jruby 1.0+) enthält ausgezeichnete Ratschläge und Ideen, die Sie vielleicht haben Hebel, um Ihren Wrapper zu erhalten
Ich halte es für interessant, den Modulnamen zu verwenden, um den Zugriff auf die importierte Java-Klasse zu ermöglichen.
Beispiel: Erstellen Sie ein Ruby-Modul namens JavaLangDemo , das die Klassen im Java-Paket java.lang enthält.
%Vor%Nun können Sie den gewünschten Java-Klassennamen mit JavaLangDemo :: voranstellen, um auf die enthaltenen Klassen zuzugreifen:
%Vor%Der Artikel erläutert auch die folgenden Themen:
und enthält eine Liste nützlicher Links zu "Verwandte Artikel" für weitere Informationen über Java-Integrationsschicht