2017-05-25 5 views
0

Ich habe ein großes Projekt besteht aus 18 Modulen und einem Elternprojekt. Dieses Projekt dauert ungefähr eine Stunde und um dies zu verbessern, haben wir uns entschieden, maven Profile zu verwenden, um die Zeit zu verkürzen, indem wir 4 verschiedene maven-Profile setzen, von denen jedes einzelne die Projektmodule enthält. die Mutter pom.xml Module war:maven build process improvement

<modules> 
    <module>module1</module> 
    <module>module2</module> 
    <module>module3</module> 
    <module>module4</module> 
    <module>module5</module> 
    <module>module6</module> 
    <module>module7</module> 
    <module>module8</module> 
</modules> 

jetzt ist es so etwas wie

<profiles> 
    <profile> 
     <id>main</id> 
     <modules> 
      <module>module1</module> 
      <module>module2</module> 
      <module>module3</module> 
     </modules> 
    </profile> 
    <profile> 
     <id>profile1</id> 
     <modules> 
      <module>module4</module> 
      <module>module5</module> 
     </modules> 
    </profile> 
    <profile> 
     <id>profile2</id> 
     <modules> 
      <module>module6</module> 
     </modules> 
    </profile> 
    <profile> 
     <id>profile3</id> 
     <modules> 
      <module>module7</module> 
      <module>module8</module> 
     </modules> 
    </profile> 
</profiles> 

wir jenkins werden mit dem Projekt zu erstellen, und wir bieten die Profilnamen in den Maven-Optionen. Das Problem hier ist, wir sehen, dass der Build fast die gleiche Zeit dauert, und es zeigt im Protokoll, dass Sonar und Clover Coverage auf dem ganzen Projekt nicht diesen Satz von Modulen laufen! eine Idee, wie das zu beheben? hat jemand vielleicht einen besseren Ansatz?

+0

Erwarten Sie zum Beispiel, dass Modul 6 analysiert wird, wenn Sie 'profile2' ausführen? und die Module 7 und 8 sollen analysiert werden, wenn Sie 'profile3' ausführen? –

+0

Ja! Ich habe versucht, innerhalb der Profildefinition zu verwenden, und es funktionierte für einige Module, aber für andere funktionierte nicht nicht sicher warum. Auch der Pom sieht nicht gut aus, weil ich das in jedem Profil machen musste. – fancier

+0

Zuerst wirklich für nur 18 Module dauert es 1 Stunde zu bauen? Warum läuft Sonar bei jedem Build? Kleeblattabdeckung? Entfernen Sie zuerst die Sonaranalyse, weil eine Sonaranalyse nur einmal am Tag Sinn macht. Laufen Sie ohne irgendwelche Tests (sind diese Tests wirklich Komponententests?) Haben Sie überprüft, wie lange die Tests dauern? Kann leicht aus dem Log-Output in Jenkins extrahiert werden ... (BTW: Die Profile sind nicht wirklich die Lösung) .. – khmarbaise

Antwort

1

Während es möglich ist, exclude a module from analysis, erhalten Sie nicht die Ergebnisse, die Sie von Ihrem aktuellen Ansatz wünschen. Das liegt daran, dass Sie eine SonarQube-Analyse mit jeder Teilmenge des Projekts durchführen möchten. Wahrscheinlich erwarten Sie, dass jede Teilmenge in SonarQube als ein anderes, durchsuchbares Projekt angezeigt wird. Aber das wird nicht passieren. Da jede Analyse mit derselben Projekt-ID erfolgt, überlagert jedes Profil die Analysen der vorherigen.

Da Ihr Projekt aus 4 unabhängigen Teilmengen zu bestehen scheint, würde ich stattdessen vorschlagen, das Projekt in 4 separate zu unterteilen, jedes mit seiner eigenen Projekt-ID, Tests und Analysen.

+0

Die Analyse passiert zweimal, wie ich sehe, einmal auf den Profilmodulen und das zweite Mal auf dem gesamten Projekt. Ich denke, ich werde es nur deaktivieren, wenn ich ein Profil für schnellere Entwicklungstests auswähle, und wir werden darüber nachdenken, es in Zukunft zu trennen. – fancier

+0

Eine Sache, die ich bemerkt habe, einige Maven Plugins haben eine Nebenläufigkeitsproblem und das wird den Build-Prozess blockieren, wenn es irgendwelche anderen Builds gibt, so dass wir auch etwas reparieren mussten. – fancier