Integration von Groovy mit Java

8

Ich arbeite gerade daran, Groovy mit einem bestehenden Java-Projekt zu integrieren. Das Groovy-Skript analysiert grundsätzlich XML in Objekte und verwendet dann vorhandene DAOs zum Speichern, Aktualisieren usw. Ich habe 2 Projekte. Ein grooviger. Ein Java. Mit Maven (ich habe das gmaven Plugin benutzt), baue ich Java und dann baue ich das Groovy Projekt.

Ich würde gerne in der Lage sein, Groovy-Skripte aus dem Java-Projekt aufzurufen und umgekehrt, falls dies der Fall sein sollte. Ich bin sicher, dass es einen Weg gibt, dies zu tun, aber ich bin dazu nicht in der Lage.

Zum Beispiel Meine Java-Klassen sind

%Vor%

Das Groovy-Skript, das aufgerufen wird, analysiert im Grunde genommen ein XML-Dokument und füllt dann eine Tabelle mit dem DAO mit dem Wert s auf, und jetzt möchte ich es nur noch in eine Datenbank schreiben.

Bitte lassen Sie mich wissen, wenn Sie irgendwelche Vorschläge haben. Danke!

    
Ken 25.02.2011, 22:42
quelle

2 Antworten

24

Grundsätzlich gibt es zwei Ansätze, um Groovy mit Java zu integrieren:

  1. Machen Sie den Java-Code kompilieren und starten Sie Groovy-Code zur Laufzeit
  2. Kompilieren und verpacken Sie Groovy-Code als Teil Ihres Builds, genau wie Sie es für Java-Code tun

Verwenden Sie 1., wenn Sie eine "Scripting" -Lösung benötigen und der Groovy-Code, der ausgeführt werden soll, nur zur Laufzeit bekannt ist. Zum Beispiel könnte der Code aus einer Datenbank geladen oder in einen GUI-Bildschirm eingegeben werden. Wenn Sie einfach das Leben einfacher machen wollen, indem Sie einige Teile Ihrer Anwendung in Groovy schreiben, gehen Sie mit 2. Zwei typische Beispiele, wo dies sich schnell auszahlen lässt, sind XML-Parsing und -Testen (natürlich gibt es viele mehr).

Angenommen, Sie sind mehr an 2. interessiert, können Sie entweder Groovy und Java separat oder zusammen kompilieren. Wenn Sie sie separat kompilieren, können statische Referenzen nur in eine Richtung gehen, so als ob Sie zwei Java-Module hätten. Wenn Sie sie zusammen kompilieren, können Sie Groovy- und Java-Code willkürlich mischen, als wäre es der gesamte Java-Code im selben Modul.

Das Kompilieren von Java- und Groovy-Code wird durch eine Groovy-Compiler-Funktion namens gemeinsame Kompilierung ermöglicht. Leider hat GMaven ernsthafte Probleme mit der gemeinsamen Erstellung, und es gibt keine Anzeichen, dass sich dies in absehbarer Zeit ändern wird. Für kleinere Projekte kommst du vielleicht durch, aber bei größeren Projekten wird es dich beißen (ich war dort). Es gibt Lösungen, aber sie sind nicht kostenlos. Wenn Sie offen für (G) Maven-Alternativen sind, sollten Sie zu Gradle wechseln, was eine viel bessere Groovy-Unterstützung bietet. (Disclaimer: Ich bin einer der Entwickler von Gradle.)

Wenn Sie sich entscheiden, bei GMaven zu bleiben, stellen Sie sicher, dass die Konfiguration richtig ist. Fast jedes Projekt, das ich sehe, scheitert bei diesem Schritt, oft ohne es zu merken. Die GMaven-Dokumentation ist veraltet, aber die Groovy-Mailingliste enthält mehrere Beiträge zum Thema. Sie können die Konfiguration auch von Spock (einem meiner eigenen Projekte) kopieren.

Um die gemeinsame Zusammenstellung von GMaven zu ermöglichen, fügen Sie das generateStubs -Ziel hinzu. Solange Ihr Projekt ohne dieses Ziel kompiliert wird, lassen Sie es weg. Es gibt auch ein generateTestStubs -Ziel, aber es wird selten benötigt.

Dies ist die Kurzgeschichte. Für die lange Geschichte, schau dir das kommende Manning Buch Making Java Groovy an. (Ich bin nicht mit dem Autor verbunden.)

    
Peter Niederwieser 26.02.2011 06:00
quelle
5

Für Peters Vorschlag Nr. 1 oben habe ich eine Sammlung von Beispielen zusammengestellt, die Java verwenden, um Groovy-Skripte auszuführen. Code-Beispiele auf GitHub . Ich kann ihn auch bei seinen Kommentaren zu GMaven und der gemeinsamen Kompilation unterstützen - es funktioniert, kann aber am Ende mehr Probleme verursachen, als es wert ist. +1 für Gradle. Während die meisten meiner Erfahrungen mit der Verwendung von Java-Quellcode und Groovy-Testcode für die Produktion verwendet wurden, hat es bisher für mich einwandfrei funktioniert. Viel Glück!

    
TheKaptain 26.02.2011 17:10
quelle

Tags und Links