Hi,
I have a existing Maven Java project in eclipse. And the second is also in Maven project with a global pom and subdirectory pom. What is the easiest way to integrate both projects into one project ? I tried to add these subfolders with the pom file. But i got the failure modules is an invalid element. Maybe there is another way to add the second project.
First of all: This is a german speaking forum. So you should consider asking your questions on an english forum or stackoverflow ot write on german.
Sub-Projects are called modules. So it can be enough to simply put the 2nd project into a subfolder and add a module with the name of the subfolder. But be aware: the outside project is also loaded and can provide things that break the build in the sub project. So you might have to work on the settings.
Hi Konrad,
Danke für dein Hinweis. Ich werde das ganze morgen nochmals ausporbieren. Den beschriebenen Ansatz hatte ich schon umgesetzt und ein Fehler mit der Pom erhalten. Aber vielleicht habe ich etwas falsch gemacht. Ich melde mich. Danke!
Bei Problemen einfach den Fehler und die POM einmal zeigen. Bei den Fehlern kann es hilfreich sein, einfach mal komplett zu zeichen, was ein mvn clean package an Ausgabe produziert, da man leicht mal etwas falsches bringt. Maven hat da so ein paar Eigenarten wie: Wenn ein externer Prozess einen Fehler signalisiert, dann wirft Maven bzw. das Plugin auch gerne eine Exception mit langem Stracktrace - nur die sind uninteressant, da sie nur sagen: Der externe Prozess hatte nicht den Returncode 0 oder so )
Du hast die modules innerhalb des build tags gesetzt.
Diese müssen außerhalb sein direkt im project tag. Ich setze diese in der Regel direkt unterhalb der Modul-Spezifikation (groupid, artefactid, version, ...)
Also bei Dir einfach den Block verschieben hinter die Zeile 5.
Hi @KonradN,
Danke für deine Antwort. Ich habe das wie beschrieben verschoben. Nun bekomme ich eine neuen Fehler.
Multiple annotations found at this line:
- Project build error: 'packaging' with value 'jar' is invalid. Aggregator projects require 'pom' as
packaging.
Die benannten Submodule haben auch POM Files. Des Weiteren gibt es noch eine Globale POM. Diese bzw. ihre Eigenschaften habe ich noch nicht ergänzt. Die Globale pom vom JUNG sieht wie folgt aus.
Das obere Projekt mit den Modulen dient nur als Rahmen. Wenn Du zwei Projekte zusammen haben willst, baust Du ein neues Parent Projekt und die zwei existierenden Projekte werden module.
Das Parent Projekt hat dann ein <packaging>pom</packaging> (Wenn das fehlt, dann ist der default "jar")
Hi @KonradN,
ich habe ein neues Maven Projekt namens DB-Sucher erstellt. Die teil projekte DB und JUNG Master Project sind nun als child deklariert bzw. DB-Suche als Parent. Wie kann ich nun auf die Klassen und JAR von den Teilprojekten zugreifen?
Ich habe es wie üblich ohne Erfolg versucht.
import DB. src.realationship
Das Parent Projekt dient nur als Rahmen - da konfigurierst du nur erste Dinge damit diese zentral konfiguriert sind.
Wenn ein Teilprojekt auf ein anderes zugreifen soll, dann machst du das über eine Dependency. Dazu einfach groupid, artefactid und Version des Teilprojektes angeben …
Hi @KonradN,
meine erste Idee war beide Projekt mittels den zwei POMs zu vereinen. Was bedeutet die DB als erstes projekt stelt am Ende Informationen zur Verfügung und JUNG als zweites plottet es mit einer GUI. Ich habe es auch bei JUNG gesehen das es etwas komplizierter werden würde.
Dadurch war dein Vorschlag ein Rahmen mittels übergeordneten Projekt zuschaffen.
Die Frage die sich mir nun stellt wie kann ich mit dem jetzigen Zustand von JUNG auf eine Liste z.B. von der DB zugreifen, die diese informationen enthält? Also was meinst du mit Dependency ?
Was ist denn das Resultat vom Projekt DB? Was wird da erstellt? Wenn man nicht weiss, was genau da jeweils gemacht wird und erstellt wird, dann wird es schwer, da irgendwas zu raten. Es kann also durchaus sein, dass dieses Vorgehen evtl. gar nicht der beste Weg ist.
Abend @KonradN,
in dem DB-Projekt wurde eine embedded Neo4j DB umgesetzt. Ich lese dort durch eine Methode die Knoten und ihre Eigenschaften aus.
Das zweite Jung Projekt soll die Informationen / Knoten in einem bestimmten Layout am Ende plotten. Das sind so grob erklärt die Abhängigkeiten von beiden Projekten. Daher muss ich beide Projekte irgendwie versuchen zusammen zubringen. Ich danke dir für dein Support.
Hallo @KonradN,
Danke für dein Support. Sorry das ich mich erst jetzt melde. Ich hatte die letzten Tage weniger Zeit.
Ich hatte ein paar Fehler in den Pom files und im JUNG Directory. Das konnte ich nun lösen.
Das Maven Projekt hat eben komplett Compeliert.
Abend @KonradN,
ich hätte zu diesem Thema doch noch eine machbarkeits Frage. Ich habe eben gelesen das ich Maven Projekte zu JAR Files Konvertieren kann.
Wenn ich nur die Klassen vom JUNG Maven in ein JAR Files Konvertiere und und dann in die DB importiere als Lib. Und danach in dem anderem DB Projekt mittels den Klassen von JUNG mir die GUI selbst zusammen baue. Ist das möglich ?
Also ein Maven Projekt wird nicht zu einem jar File konvertiert. Wenn ein build statt findet, dann wird ein Lifecycle durchlaufen. Und dabei gibt es einen package Goal, das auch durchlaufen wird und in diesem wird - so man nichts anderes konfiguriert - auch ein Paket erstellt. Das ist standardmäßig eine JAR Datei. Somit kann das Ergebnis eines Laufes ein jar File sein.
Wenn nun ein anderes Projekt dieses Projekt als Abhängigkeit hat, dann kann dieses auch auf das erzeugte jar File zugreifen. Ich bin mir aber gerade nicht sicher, ob die Strukturierung, wie Du es Dir vorstelltst, optimal ist. Das "in die DB importieren" hört sich nach einem Deploy an. Im Lifecycle gibt es auch das deploy - das könnte also Bestandteil des Projektes sein, das die JAR Datei erzeugt.
Hi @KonradN,
du kennst ja mein Vorhaben aktuell etwas. Ich habe nun ein weiteres Problem mit der Übergabe von der Virtualisierung in JUNG in das Parent Projekt. Ich habe Im JUNG Projekt eine Klasse Interface die meine GUI darstellt, dort gibt es auch ein Textfeld. Den String des Textfeldes würde ich gerne an eine Methode in der Parentklasse übergeben. Folgendes habe ich probiert. Im Actionlistener werte ich das Textfeld aus und setze die Variable. Diese habe ich einmal Global als public static deklariert. Danach wollte ich die parent klasse rufen die dann mit dieser Eingabe / Zeichenkette in der DB Sucht. Aber aktuell funktioniert das nicht so wie ich es mir vorstelle. Vielleicht hast du eine Idee.
Java:
publicvoidactionPerformed(ActionEvent e){// after an Enter, should be searched in Graph DBTextfromTextfield=GraphLayoutSelector.InputtextF.getText();DBPlot.plotgraph();
Im Augenblick verstehe ich die Problematik leider nicht wirklich. Du hast ja zwei Ebenen: Einmal die Projektebene mit den Projekten und dann zur Laufzeit die Klassen und Instanzen, die Du verwendest.
Wo genau ist das Problem? Die Klassen sind in unterschiedlichen Maven Projekten, aber die konntest Du einbinden?
Ist das Problem dann die Abhängigkeiten? Du hast ein UI Projekt und das nutzt ein anderes Projekt. Aber nun soll das andere Projekt auf das UI Projekt zugreifen? Diese wechselseitigen Abhängigkeiten sind schlecht. Da wäre dann in dem nicht UI Projekt etwas notwendig, das die Daten entgegen nimmt. Wenn DBPlot die Klasse aus dem anderen Projekt ist, dann wäre denkbar, da z.B. einen Konstruktor zu haben, der die EIngabe benötigt. Dann wäre das sowas wie:
Hi @KonradN,
ich habe mal eben fix was im Darw.io gezeichnet. Das sollte die Abhängigkeiten der beiden Projekte erklären.
Wenn der Nutzer eine Eingabe im Gui interface macht, dann wird das mittels Actionlistner/actionPerformed geprüft. Diese Methode wird auch gerufen. Nur wen ich die Infos habe würde ich gerne die Zeichenkett ein der dbPlot verwenden. Zu deinen Fragen vielleicht noch. Die Eingaben im GUI interface sollen in der DB Plot verarbeitet werden. Die Klassen und deren Methoden von DBPlot sind Importiert. Nur kann nach einer Eingabe in dem Textfeld und der Übergabe zur Methode wird die DBPLot Methode nicht gerufen.
ich habe über das Wochenende etwas an meinem Projekt weiter gearbeitet und die Listener in der DBPlot hinzugefügt. Diese schauen, wen sich etwas in der GUI ändert. Das machen sie auch. Aktuell habe ich das Problem, dass ich die bestimmte Werte von den JComponenten von der DB PLot aus, in dem GUI Interface nicht setzen kann. Ich wollte z.B. nach der Eingabe und den zwischen Speichern von einem Textfeld String, den String im Textfeld wieder löschen. Leider reagiert die GUI bzw. das Textfeld nicht darauf.
Hi @KonradN ,
in dem DB Plot oder oberen Projekt habe ich einen actionPerformed Listener hinzugefügt.
Dieser schaut wen sich im Textfield im GUI-interface sich etwas ändert. Die Eingaben sollen in einer Liste (SearchList) zwischen gespeichert werden.
Mit der Zeile GraphLayoutSelector.InputtextF.setText(""); wollte ich die Zeichenkette im Textfeld im Porjekt GUI Interface entfernen. Leider funktioniert das nicht.
Java:
@OverridepublicvoidactionPerformed(ActionEvent e){// after an Enter, should be searched in Graph DBif(e.getSource()==GraphLayoutSelector.InputtextF){if((!SearchList.contains(GraphLayoutSelector.InputtextF.getText()))&&!GraphLayoutSelector.InputtextF.getText().isEmpty())SearchList.add(GraphLayoutSelector.InputtextF.getText());GraphLayoutSelector.InputtextF.setText("");GraphLayoutSelector.treeButton.setEnabled(true);GraphLayoutSelector.radialButton.setEnabled(true);