Manieren om Maven sneller te laten bouwen?

Ik heb een Java-project met meerdere modules. Maven heeft bijna 40 seconden nodig om het te bouwen. Ik heb maven ook geprobeerd met builds met meerdere threads door -T en -C args op te geven voor het aantal threads en cores dat moet worden gebruikt. Maar ik heb geen significante verbetering gezien in de muurtijd van mijn builds.

Ik gebruik maven 3.2.3 en soms moet ik mijn project heel vaak bouwen.

Ik weet dat een schoon doelpunt veel tijd kost, maar ik kan er niet omheen.

Suggesties alstublieft….

BEWERKEN:

Opmerking: in mijn geval kost het schoonmaken niet veel tijd. Het is klaar in 1 sec. installatie neemt de rest van de tijd in beslag.


Antwoord 1, autoriteit 100%

Opmerking: het eerste is AFAIK, er zijn geen andere ingebouwde opties beschikbaar in maven behalve alle antwoorden hier.


Maven build uitvoeren met meerdere threads werkt voor mij om de builds te versnellen.
Bijvoorbeeld:

mvn clean install -T100

waar -T is om aan te geven hoeveel threads je wilt op basis van je
hardware.

Hieronder staan ​​de varianten van wiki

Maven 3.x heeft de mogelijkheid om parallelle builds uit te voeren. Het bevel
is als volgt:

  • mvn -T 4 schone installatie Bouwt met 4 threads
  • mvn -T 1C schone installatie 1 thread per cpu-kern
  • mvn -T 1.5C schone installatie 1.5 thread per cpu-kern

Hoe uitvoering wordt geëvalueerd(Bekijk parallelle builds in Maven 3)?

voer hier de afbeeldingsbeschrijving in

Elk knooppunt in de grafiek vertegenwoordigt een module in een build met meerdere modules, de “niveaus” geven eenvoudig de afstand aan tot de eerste module in de interne reactorafhankelijkheidsgrafiek. Maven berekent deze grafiek op basis van gedeclareerde afhankelijkheden tussen modules voor een build met meerdere modules. Merk op dat het bovenliggende maven-project ook een afhankelijkheid is, wat verklaart waarom er een enkel knooppunt bovenop de meeste projectgrafieken staat. Afhankelijkheden buiten de reactor hebben geen invloed op deze grafiek.

Als u de uitvoering van tests wilt overslaan, kunt u ook -DskipTestsgebruiken.

Let op:Sommige van uw plug-ins zijn mogelijk niet compatibel voor multithreaded builder, het kan werken. maar het zal onderstaand waarschuwingsbericht geven. u moet mogelijk documentatie over plug-ins raadplegen voor ondersteuning voor multithreading.

[WARNING] *****************************************************************                                                                                                                                 
[WARNING] * Your build is requesting parallel execution, but project      *                                                                                                                                 
[WARNING] * contains the following plugin(s) that have goals not marked   *                                                                                                                                 
[WARNING] * as @threadSafe to support parallel building.                  *                                                                                                                                 
[WARNING] * While this /may/ work fine, please look for plugin updates    *                                                                                                                                 
[WARNING] * and/or request plugins be made thread-safe.                   *                                                                                                                                 
[WARNING] * If reporting an issue, report it against the plugin in        *                                                                                                                                 
[WARNING] * question, not against maven-core                              *                                                                                                                                 
[WARNING] *****************************************************************                                                                                                                                 
[WARNING] The following plugins are not marked @threadSafe in test-project:                                                                                                                          
[WARNING] de.dentrassi.maven:rpm:0.9.2                                                                                                                                                                      
[WARNING] Enable debug to see more precisely which goals are not marked @threadSafe.                                                                                                                        
[WARNING] *****************************************************************    

Antwoord 2, autoriteit 64%

Op mijn eigenlijke project:

  1. mvn clean install[INFO] Totale tijd: 01:05 uur
  2. mvn clean install -DskipTests[INFO] Totale tijd: 18:35 min
  3. mvn clean install -Dmaven.test.skip -DskipTests[INFO] Totale tijd: 10:58 min
  4. mvn -T 1C clean install -Dmaven.test.skip -DskipTests[INFO] Totale tijd: 04:00 min
  5. We kunnen de te genereren javadoc ook overslaan als Archmed commentaardoor -Dmaven.javadoc.skip=truemvn -T 1C clean install -Dmaven.test.skip -DskipTests -Dmaven.javadoc.skip=true
  6. Gebruik geen * imports, kies op IntelliJ > Analyseren > Voer inspectie uit op naam > * imports , om alle * imports te vinden en te corrigeren.
  7. Verwijder alle ongebruikte importsin uw project > op Intellij > Analyseren > Voer inspectie uit op naam > ongebruikte invoer
  8. Verwijder alle ongebruikte code(klassen, variabele, veld, parameter, etc..), op Intellij: Analyse > voer inspectie uit op naam > ongebruikte aangifte.
  9. Upgrade naar laatste JAVA-VERSIE
  10. Ik heb geconstateerd dat de taak mvn clean2 minuten duurt om de TARGET-map op te schonen voordat deze wordt gebouwd. Ik heb een nieuwe taak gemaakt met de naam quickclean, en ik gebruik het in plaats van schoon, op deze manier mvn -T 1C quickclean install -Dmaven.test.skip -DskipTests. Deze nieuwe taak quickclean is alleen het hernoemen van de bouwmapvan TARGET naar TARGET-jjjj-MM-dd-HH-mm(wat is ZEER SNEL). Dus nu, elke keer dat je een nieuwe mvn quickclean install...maakt, heb je een map met de tijd van de build. Het lastigeis dat dit veel ruimte op de harde schijfkan kosten, dus je moet al deze mappen soms opschonen. Daarom heb ik een andere taak gemaakt met de naam: trashclean, om al deze mappen in de prullenbak te plaatsen. Ik voer deze taken misschien op tijd per week uit. of maand, afhankelijk van mijn werk mvn trashclean.

Dit is wat je moet toevoegen aan je pom.xml als je dit concept wilt gebruiken

<properties>
    <timestamp>${maven.build.timestamp}</timestamp>
    <maven.build.timestamp.format>yyyy-MM-dd-HH-mm</maven.build.timestamp.format>
    <trashdir>trash/target-${maven.build.timestamp}</trashdir>
</properties>
    <profile>
        <id>quickclean</id>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-antrun-plugin</artifactId>
                    <executions>
                        <execution>
                            <id>rename_target</id>
                            <phase>pre-clean</phase>
                            <goals>
                                <goal>run</goal>
                            </goals>
                            <configuration>
                                <tasks>
                                    <move todir="${trashdir}" failonerror="false">
                                        <fileset dir="target/"/>
                                    </move>
                                </tasks>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
    </profile>
    <profile>
        <id>trashclean</id>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-antrun-plugin</artifactId>
                    <executions>
                        <execution>
                            <id>clean_trash</id>
                            <phase>clean</phase>
                            <goals>
                                <goal>run</goal>
                            </goals>
                            <configuration>
                                <tasks>
                                    <delete dir="trash/" failonerror="false"/>
                                </tasks>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
    </profile>

Antwoord 3, autoriteit 9%

Je kunt de build optimaliseren door een kleine-2-truc te gebruiken, zoals

  1. Als je Junit Test hebt geschreven en niet elke keer een testcase wilt uitvoeren, kun je -DskipTests=true
  2. gebruiken

  3. Lokaal Nexus of repositories installeren
  4. U kunt geheugenconfiguraties optimaal aanpassen voor bijvoorbeeld: voeg deze regel toe aan mvn.batset MAVEN_OPTS=-Xmx512m -XX:MaxPermSize=256m

Voor meer informatie kun je kijken op Hoe u uw Maven-build kunt versnellen


Antwoord 4, autoriteit 9%

Als u de opdrachtregel gebruikt, kunt u controleren hoeveel kernen uw machine heeft en ze allemaal gebruiken. Als u ook uw tests wilt overslaan, kunt u -DskipTeststoevoegen
Ik heb bijvoorbeeld een processor met 8 kernen:

mvn -T 8C clean install -DskipTests

Antwoord 5, autoriteit 9%

Je kunt een hacky-manier doen als je wat extra RAM hebt zoals ik, en je hebt geen SSD nodig, omdat het gevoelig is voor SSD om veel lees-schrijfbewerkingen uit te voeren. Zelfs als je + een beetje uitschakelt (MacOS – ik weet niet meer of Win een soortgelijk probleem heeft). Maar

  1. maak RAM-station (aantal manieren hangt af van uw besturingssysteem) en koppel het aan /Users/Gebruikersnaam/vluchtige map

  2. zoek maven-module-builder-X.X.X.jar in MVN_HOME/lib

  3. wijzig in JAR het bestand org/apache/maven/model/pom-4.0.0.xml door te wijzigen

&lt;build>&lt;directory>/Users/Username/volatile/${project.groupId}/${project.artifactId}/${project.version}/target

  1. Vanaf nu zullen alle projectcompilaties in het geheugen worden gedaan. En het is een verschil, zelfs in vergelijking met SSD.

Ja, de hack en sommige maven plug-ins kunnen stoppen met werken tussen haakjes.


Antwoord 6, autoriteit 8%

Behalve de parallelle uitvoering die veel van de mensen al hebben genoemd, probeer deze maven-opties die het bouwen zouden versnellen
-XX:+TieredCompilation -XX:TieredStopAtLevel=1

Other episodes