Frage

Ich habe gerade die Konvertierung eines unserer internen Framework-Projekte von Ant nach Maven abgeschlossen.Der Maven-Build läuft einwandfrei und lässt sich ohne Probleme in unserem Repository bereitstellen.

Das Problem besteht darin, dass es nicht funktioniert, wenn andere Projekte versuchen, das Framework zu nutzen.Das Einzige, was heruntergeladen wird, ist das Top-Level-Framework POM.

Ich habe versucht, einige Abhängigkeitseinträge zu einem oder mehreren der verschiedenen Module hinzuzufügen, aber egal welches ich hinzufüge, ich erhalte einen zirkulären Abhängigkeitsfehler.Ich habe auch versucht, eine zweite POM-Datei der obersten Ebene ohne Module und mit einigen Abhängigkeiten zu erstellen, um die Datei im Repository-Manager zu überschreiben.Dies führt dazu, dass einige der Abhängigkeiten heruntergeladen werden, der Maven-Build dann jedoch an zufälligen Stellen hängen bleibt.Basierend auf dem Windows-Task-Manager sieht es so aus, als ob es sich in einer Endlosschleife befindet.Eine zweite POM-Datei scheint also nicht die Lösung zu sein (oder ich mache es falsch).

Meine Framework-POM-Datei sieht in etwa so aus:

<project>
  <modelVersion>4.0.0</modelVersion>

  <groupId>framework_snt</groupId>
  <artifactId>SFP</artifactId>
  <packaging>pom</packaging>
  <name>SFP framework</name>
  <version>6.3</version>

  <modules>
.... 50+ modules here
  </modules>

und dann die üblichen Eigenschaften, Abhängigkeitsverwaltung und PluginManagement-Einträge für ein POM der obersten Ebene.

im verbrauchenden Modul habe ich gerade Folgendes:

<dependency>
  <groupId>framework_snt</groupId>
  <artifactId>SFP</artifactId>
  <version>6.3</version>
  <type>pom</type>
</dependency>

Dies befindet sich auf der obersten POM-Ebene, sodass alle Submodule Zugriff auf die Framework-Bibliotheken haben, um es den Entwicklern zu erleichtern.

Wie richte ich die Dinge so ein, dass alle abhängigen JAR-Dateien von meinen konsumierenden Projekten heruntergeladen werden?

War es hilfreich?

Lösung

Es hört sich so an, als würde Ihr Framework-Projekt mehrere JAR-Artefakte erzeugen, eines für jedes untergeordnete Modul, aber kein JAR-Artefakt für das übergeordnete Projekt.Daher ist es nicht das, was Sie tun möchten, eine Abhängigkeit vom POM des übergeordneten Projekts zu deklarieren.Stattdessen müssen Sie eine Abhängigkeit von jedem der untergeordneten Module Ihres Framework-Projekts deklarieren.

Ich habe ein ähnliches Setup, bei dem ich ein „Toolkit“-Projekt mit mehreren Modulen habe (von denen jedes ein Jar-Artefakt erzeugt).Dann erkläre ich in meinen anderen Projekten Abhängigkeiten von den Modulen, die ich verwenden muss.Ich erkläre jedoch keine Abhängigkeit von der POM-Datei meiner übergeordneten Projekte „Toolkit“.Stattdessen deklariere ich einfach Abhängigkeiten von den JAR-Artefakten der untergeordneten Module.

<dependency>
  <groupId>com.mycompany.toolkits</groupId>
  <artifactId>file-utils</artifactId>
  <version>1.0.0</version>
</dependency>

Beachten Sie, dass meine Abhängigkeitsdeklaration auf eines meiner untergeordneten Module verweist und keine Deklaration vornimmt <type>pom</type> wie du es getan hast.Wenn Sie wirklich explizit sein wollten, könnten Sie es erklären <type>jar</type> stattdessen.

Andere Tipps

Der framework Pom, wie du es nennst, ist das parent pom Ihres Multi-Modul-Projekts.

Während die Module voneinander abhängen können, können sie nicht von diesem übergeordneten Modul abhängen.Dies ist möglicherweise der Grund für die zirkuläre Abhängigkeit.

Sie müssen sich Ihre Module noch einmal ansehen und herausfinden, welche Module von welchen abhängen, und die Abhängigkeiten entsprechend spezifizieren.Auch diese Abhängigkeiten sind typischerweise jar Abhängigkeiten – eine Verpackung, die Quellen und Ressourcen enthält.

Maven mit gutem Beispiel ist eine der vielen verfügbaren Ressourcen, die weitere Informationen liefern.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top