Die beste Möglichkeit, Teile einer Maven pom.xml über nicht verwandte Projekte hinweg zu teilen?

8

Unser Unternehmen hat eine Reihe von "Best Practices" in Bezug auf Maven Poms definiert. Geben Sie beispielsweise utf-8 für die Ressourcenverarbeitung, die zu filternden Ordner, Unit-Tests und Integrationstests sowie Compilereinstellungen an.

Im Moment sind diese Best Practices in unserem Unternehmens-Wiki dokumentiert, aber wenn sich die Liste der "Best Practices" ändert, werden diese Änderungen selten in den Projekt-Poms widergespiegelt, bis ein Problem auftritt. Die menschliche Natur ist, was es ist und alles ....

Gibt es eine Möglichkeit, diese Einstellungen und Eigenschaften über Maven bereitzustellen / durchzusetzen? Es ist fast so, als würde man jedem Projekt einen Elternteil pom.xml geben, aber ich möchte (und kann nicht), dass alle diese Projekte dasselbe Eltern-Pom referenzieren.

Wir brauchen einen Ansatz, der sowohl auf den Maschinen des Entwicklers als auch auf unserem Hudson CI-Server funktioniert.

    
HDave 11.11.2010, 14:46
quelle

5 Antworten

7

Die einzige Maven-Lösung ist ein gemeinsames Elternteil. Vielleicht könnten Sie es tun, wenn Sie ein "freigegebenes" Elternteil verwenden würden?

Erstellen Sie ein Projekt, das nur das Eltern-Pom enthält, und führen Sie das Release-Plugin aus, und veröffentlichen Sie es in Ihrem internen Repository. Dann verwenden Sie dieses übergeordnete Element als übergeordnetes Element aller Ihrer Projekte, indem Sie es von Ihrem Repository herunterladen, anstatt es nach dem relativen Pfadnamen zu suchen?

    
bmargulies 11.11.2010, 14:57
quelle
4

Sie können Maven Project Archetypen mit Einstellungen erstellen, die die Best Practices Ihres Unternehmens erfüllen. Es ist eher eine "Bereitstellung" als eine "Durchsetzung" der Lösung und möglicherweise möglicherweise nicht genug (abhängig davon, was diese besten Praktiken wirklich sind). Ссылка

    
mcveat 11.11.2010 17:38
quelle
4

(das ist ein alter Thread, ich füge nur diese Information als Referenz hinzu)

Für Abhängigkeiten können Sie den Importblock "dependencyManagement" verwenden (funktioniert aber nur mit Abhängigkeiten und nicht mit Eigenschaften usw.).

Haben Sie einfach eine "Bibliothek", die wie gewohnt verschiedene Abhängigkeiten definiert (mit ihren Ausschlüssen und spezifischen Versionen).

Dann importieren Sie im Hauptbereich Ihres Projekts diesen Abhängigkeitsabschnitt in Ihren Abschnitt "dependencyManagement": Alle Abhängigkeiten, die in der Bibliothek pom definiert sind, werden importiert. Darüber hinaus werden alle Versionen, die in dieser Abhängigkeitsverwaltung definiert sind, von Maven immer verwendet (Maven wird keine andere als die in der dependencyManagement definierte Version verwenden). Dies ist fast obligatorisch, um Ihren Klassenpfad zu verwalten, wenn Sie verschiedene Projekte verwenden, die auf dieselben Bibliotheken angewiesen sind.

Importieren Sie die Bibliothek pom wie folgt im Pom Ihres Hauptprojekts:

%Vor%

Überprüfen Sie online maven-Dokumentation

    
SRG 03.10.2012 13:07
quelle
3
  

Es ist fast so, als würde man jedem Projekt einen Elternteil pom.xml geben, aber ich möchte (und kann nicht), dass alle diese Projekte dasselbe Eltern-Pom referenzieren.

Ich sage nicht, dass ich unbedingt alles in ein Eltern-POM schreiben muss, aber in einer Unternehmensumgebung ist es wirklich eine gute Idee, ein Top-Level-Unternehmens-POM zu haben (siehe Abschnitt 3.6.2.2. Multi-Modul Enterprise Project des Mavenbuchs), mit einem eigenen Veröffentlichungszyklus.

Aber das wird nicht ausreichen, um etwas durchzusetzen, und mein Vorschlag wäre, das Maven Enforcer Plugin zu betrachten bietet vorhandene Regeln , ermöglicht aber auch das Schreiben eigener benutzerdefinierter Regeln mit < a href="http://maven.apache.org/enforcer/enforcer-api/writing-a-custom-rule.html"> maven-enforcer-rule-api . Ich kann jedoch nicht sagen, wie weit Sie mit benutzerdefinierten Regeln gehen können. Wie auch immer, ich empfehle dieses Plugin sehr. Wenn Sie es noch nicht benutzen, ist es definitiv Zeit zu beginnen:)

    
Pascal Thivent 11.11.2010 15:55
quelle
2

Ohne einen Master-Pom gibt es keinen technologischen Weg, um das zu erzwingen, wonach Sie fragen (und noch würde jedes Projekt von Anfang an damit zurechtkommen). Der einzige wirksame Weg, Best Practices im Laufe der Zeit zu erzwingen, besteht darin, dass es jemandes Aufgabe ist, die Durchsetzung zu erzwingen. Sie können es auf viele Personen verteilen (z. B. indem Sie es zu ihren Stellenbeschreibungen hinzufügen), aber das lässt es in Vergessenheit geraten, weil jeder davon ausgeht, dass jemand anderes es tut. Eine Person, die namentlich genannt wird, und es wird keine Geldbuße geben.

    
Donal Fellows 11.11.2010 14:58
quelle

Tags und Links