java - plugin - maven release to nexus



Wie spezifiziert man maven's DistributionManagement organisationsweit? (1)

Die beste Lösung hierfür ist, ein einfaches Eltern-Pom-Datei-Projekt (mit Pom 'Packaging') generisch für alle Projekte Ihrer Organisation zu erstellen.

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>your.company</groupId>
    <artifactId>company-parent</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <packaging>pom</packaging>

    <distributionManagement>
        <repository>
            <id>nexus-site</id>
            <url>http://central_nexus/server</url>
        </repository>
    </distributionManagement>

</project>

Dies kann erstellt, freigegeben und auf Ihrem lokalen Nexus bereitgestellt werden, sodass jeder Zugriff auf sein Artefakt hat.

Jetzt für alle Projekte, die Sie verwenden möchten, fügen Sie einfach diesen Abschnitt ein:

<parent>
  <groupId>your.company</groupId>
  <artifactId>company-parent</artifactId>
  <version>1.0.0</version>
</parent>

Mit dieser Lösung können Sie ganz einfach andere gängige Dinge zu allen Projekten Ihres Unternehmens hinzufügen. Wenn Sie beispielsweise Ihre JUnit-Nutzung für eine bestimmte Version standardisieren möchten, wäre dies der perfekte Ort dafür.

Wenn Sie Projekte haben, die Multi-Modul-Strukturen verwenden, die ihre eigenen Eltern haben, unterstützt Maven auch die Verkettung von Vererbung, so dass es vollkommen akzeptabel ist, die Eltern-Pom-Datei Ihres Projekts auf den Eltern-Pom Ihres Unternehmens zu beziehen und die Kind-Module des Projekts nicht einmal zu kennen Mutter des Unternehmens.

Ich sehe von Ihrer Beispielprojektstruktur, dass Sie versuchen, Ihr Elternprojekt auf die gleiche Ebene wie Ihr Aggregator Pom zu bringen. Wenn Ihr Projekt einen eigenen Elternteil benötigt, ist der beste Ansatz, den ich gefunden habe, den Elternteil auf die gleiche Ebene wie die übrigen Module zu setzen und Ihre Aggregator-Datei pom.xml im Stammverzeichnis aller Verzeichnisse Ihrer Module zu haben.

- pom.xml (aggregator)
    - project-parent
    - project-module1
    - project-module2

Was Sie mit dieser Struktur tun, schließen Sie Ihr Elternmodul in den Aggregator ein und bauen alles mit einem 'mvn install' aus dem Stammverzeichnis auf.

Wir verwenden diese genaue Lösung in meiner Organisation und sie hat sich bewährt und hat sich für uns sehr gut bewährt.

Ich versuche herauszufinden, wie viele (mehr als 50) maven2-Projekte organisiert werden können, damit sie in einem zentralen Nexus-Repository bereitgestellt werden können. Wenn Sie mvn deploy Ziel mvn deploy , muss das Ziel im Tag distributionManagement wie folgt angegeben werden:

<distributionManagement>
   <repository>
      <id>nexus-site</id>
        <url>http://central_nexus/server</url>
   </repository>
</distributionManagement>

Nun möchte ich nicht, dass jede einzelne pom.xml (von diesen 50+) diesen Block immer und immer wieder enthält. Meine erste wäre aber die Datei settings.xml , aber es scheint, dass es (vom Design her) nicht möglich ist, sie dort zu definieren. Also, die erste Frage wäre, warum ist das der Fall? Wenn es möglich wäre, könnte ich es in der settings.xml in der Maven2-Distribution angeben, die an alle Entwickler verteilt werden könnte.

Die einzige mögliche Lösung, die ich gefunden habe, war ein organisationsweites Master-Pom-Projekt zu erstellen, das diese Einstellungen enthält und alle anderen pom.xml von diesem Master-Pom über das <parent> -Tag abhängig macht. Aber das sieht in Multi-Modul-Builds irgendwie seltsam aus:

- master configuration POM (pm)
- Project 1 parent pom (p1 with module 1 and module 2 as modules)
    - Project 1 module pom (with pm as parent)
    - Project 2 module pom (with pm as parent)

Normalerweise lese ich in der gesamten Dokumentation, dass die Modulpoms das Elternpom verwenden sollten, nicht ein anderes. Aber nach dem Lesen der Maven-Website über Vererbung v. Aggregation steht geschrieben, dass es tatsächlich möglich ist.

Ein Problem, das ich gefunden habe, war mit der Maven-Site-Generation, die Probleme mit diesem Setup zu haben scheint (Module werden nicht richtig verknüpft, wenn sie keine direkte Rückverweisung haben)

Also, ist das ein gültiger Ansatz? Jede andere, offensichtliche, einfachere Lösung des Problems?





nexus