2013-01-12 4 views
15

Heyho,Wie die Freisetzung oder bestimmte Module im Maven Repo

Ich habe ein Maven-Projekt mit diesem scructure überspringen:

parent:

  • API Modul
    • Liste item
    • module2
    • ...
    • modul5
    • Test
    • Verteilung/Montage

    Also ich das übergeordnete Modul zuerst ausgeführt, dann betreibe ich das Modul, das die api baut, dann werden die Module, die auf der api ab, dann ein Testmodul, das Tools enthält um zu testen und am Ende führe ich eine Assembly/Distribution wo ich einige Module in einem Archiv verpacke. Wegen einiger Probleme kann ich den Weg nicht wirklich ändern und es funktioniert soweit perfekt.

    Mit den Jenkins ich release es auf die Maven Repo, aber ich möchte nur zum Beispiel die API und ein paar Module, nicht das Testmodul und das Vertriebsmodul freigeben. Gibt es eine Möglichkeit, sie zu überspringen? Ich möchte nicht Sachen veröffentlichen, die ich nicht wirklich brauche:/

    +0

    Ist dies ein Multi-Modul-Build? Haben Sie Eltern pom.xml Module Einträge? Haben die Module wie API-Modul ein Elternteil (das Elternteil)? ja – khmarbaise

    +0

    , der Multi-Modul-Setup funktioniert perfekt Ich mag nur Module aus dem Maven Repo auszuschließen: P – maxammann

    Antwort

    20

    Um Sie richtig zu verstehen, wollen Sie immer noch die Testmodule ausführen, aber Sie wollen sie nicht bereitstellen/freigeben. Die maven-deploy-plugin zur Rettung! Artefakt wird weiterhin erstellt, aber nicht bereitgestellt.

    <plugin> 
        <groupId>org.apache.maven.plugins</groupId> 
        <artifactId>maven-deploy-plugin</artifactId> 
        <version>2.7</version> 
        <configuration> 
         <skip>true</skip> 
        </configuration> 
        </plugin> 
    

    Allerdings wird das jenkins release plugin immer noch alle Artefakte freigeben. Statt das Plugin jenkins Freisetzung wollen, gibt man mit dem maven-release-plugin über die Freigabe, die einfach zu tun ist:

    mvn release:prepare 
    mvn release:perform 
    

    Da die default goals sind deploy und site, alles in Ordnung sein sollte.

    So stellen Sie sicher, dass Sie einen scm Tag in Ihrem Root-pom haben:

    <scm> 
        <connection>scm:svn|git:https://...</connection> 
        <developerConnection>scm:svn|git:https://...</developerConnection> 
    </scm> 
    

    und dass Ihr Versionierungstool Befehl (git, svn, ...) ist auf dem Pfad.

    +0

    ich dies bereits versucht, aber ich denke, es ist ein Problem mit jenkins, die freigibt alle Module:/ – maxammann

    +0

    k es möglich wäre, mit der "normale" Deployment mit dem Deploy-Plugin, aber vielleicht nicht mit dem Jenkins-Plugin:/ – maxammann

    +0

    Ich denke, du solltest das untersuchen. Jenkins benutzt wahrscheinlich nur Maven. Wie konnte Jenkins das Setup im Pom umgehen? –

    2

    Sie könnten eine maven-Befehlszeilenoption hinzufügen, um Module anzugeben, die in jenkins erstellt werden sollen.

    -pl,--projects <arg>     Comma-delimited list of specified 
                 reactor projects to build instead 
                 of all projects. A project can be 
                 specified by [groupId]:artifactId 
                 or by its relative path. 
    
    +0

    Diese komplett die Projekte ausschließen, aber ich will nur die deploy in der Maven-Repo überspringen – maxammann

    +0

    In Jenkins Sie Maven mehrmals ausführen können, damit Sie tun können ein kompilieren auf alle Projekte und nur ein Release auf die, die Sie wollen. –

    +0

    @DanielKaplan hm das Release jenkins Plugin läuft nur einmal und für alle Module – maxammann

    0

    Zweck der Aggregatorprojekte ist es, die Bauanforderungen für einfache Projekte zu kombinieren. Wenn für Ihre Basisprojekte andere Anforderungen an den Bau bestehen, sollten Sie ein neues Aggregatorprojekt hinzufügen.

    Deaktivieren Sie die Bereitstellung in Ihrem Maven-Repository in Ihrem aktuellen Aggregatorprojekt und erstellen Sie ein neues Aggregatorprojekt, das nur die Module enthält, die Sie bereitstellen möchten.

    Fügen Sie dieses neue Projekt zu Jenkins hinzu, machen Sie es abhängig von Ihrem ursprünglichen Projekt und konfigurieren Sie es für die Bereitstellung in Ihrem Repository.

    +0

    Ihre Terminologie aus zu sein scheint, was Sie zu beschreiben Eltern Projekte erscheinen soll. Eltern Projekte werden für die Konfiguration verwendet, Aggregator-Projekte definieren Gruppen von zu erstellenden Projekten Manchmal sind Eltern und Aggregator das gleiche Projekt –

    +1

    Bauanforderungen = müssen erstellt werden, nicht Konfigurationsanforderungen/Gemeinsamkeiten Leider wird in einigen Literaturen nicht zwischen Aggregation und Elternschaft unterschieden die verschiedenen Zwecken dienen und am besten getrennt gehalten werden s an Leute, die denken, dass ihre Projekte in höchstens einem Aggregator enthalten sein können. Dies scheint beim OP der Fall zu sein. –

    Verwandte Themen