Question

J'utilise un artificiel local pour envoyer la requête par proxy, mais les phases de construction et de test sont toujours un peu lentes. Ce ne sont pas la compilation proprement dite et les tests qui sont lents, c'est le & "Warmup &"; du cadre maven2. Des idées?

Était-ce utile?

La solution

Il existe quelques possibilités pour optimiser certaines des tâches de construction. Par exemple, la tâche «propre» peut être optimisée de quelques minutes à quelques millisecondes à l’aide d’un simple tour: renommez le dossier «cible» au lieu de supprimer.

Pour plus d'informations sur la procédure à suivre, reportez-vous à Accélérez la création de Maven .

Autres conseils

Je ne sais pas quelle version de Maven vous utilisez, je suppose 2, mais je donnerai ce que j'utilise pour Maven 1.x pour accélérer et rendre les choses un peu plus rapides.

Ceci va insérer les tests junit dans un nouveau processus (cela aide également lorsque vous utilisez des variables d'environnement dans des tests, etc. et donne aux tests un peu plus de mémoire.

-Dmaven.junit.fork=true
-Dmaven.junit.jvmargs=-Xmx512m

Ceci lance la compilation qui pourrait accélérer les choses pour vous

-Dmaven.compile.fork=true

J'espère que cela peut aider un peu, essayez-le.

Voir aussi obtenez plus de rapidité avec votre version maven2 .

Si vous utilisez Maven3 ($ mvn -version), vous pouvez également suivre cette guide . Dans mon cas, les résultats sont les suivants:

Exécution normale:

$ mvn clean install 
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 03:05 min
[INFO] Finished at: 2015-07-15T11:47:02+02:00
[INFO] Final Memory: 88M/384M

Avec traitement parallèle (4 threads):

$ mvn -T 4 clean install
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 02:22 min (Wall Clock)
[INFO] Finished at: 2015-07-15T11:50:57+02:00
[INFO] Final Memory: 80M/533M

Traitement parallèle (2 threads par cœur)

$ mvn -T 2C clean install

[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 02:12 min (Wall Clock)
[INFO] Finished at: 2015-07-15T12:00:29+02:00
[INFO] Final Memory: 87M/519M
[INFO] ------------------------------------------------------------------------

Comme on peut le constater, la différence est presque une minute, soit 20 à 30% d’amélioration de la vitesse.

  1. Ajustez les configurations de mémoire de manière optimale, par exemple: ajoutez cette ligne à mvn.bat set MAVEN_OPTS = -Xmx512m -XX: MaxPermSize = 256m

  2. La phase de nettoyage de mvn supprime normalement le dossier cible. Si nous renommons le dossier cible, la phase de nettoyage sera beaucoup plus rapide. & Lt; quickClean >

  3. -Dmaven.test.skip = true ignorera l'exécution du test.

  4. Ajoutez -Denforcer.skip = true à l'argument de ligne de commande mvn (ceci impose des versions de maven, jdk, etc., nous pouvons le ignorer après les exécutions initiales)

  5. Désactivez les opérations non critiques pendant la phase de construction: analyse, génération de javadoc, empaquetage source. Cela fera gagner un temps considérable.

  6. Spawnig nouveau processus contribue également à l'amélioration du temps -Dmaven.junit.fork = true (transforme les tests junit en un nouveau processus) -Dmaven.compile.fork = true (forque la compilation)

    J'espère que cela vous aidera.

Vous pouvez utiliser -DskipTests=true pour ignorer les tests unitaires. ce qui accélérerait la construction

J'ai constaté que l'analyse des projets de réacteurs est nettement plus lente que celle des projets à une seule pompe. Si votre version est réacteur (multi-module) et que vos développeurs ne travaillent pas sur tous les modules en même temps, vous pouvez supprimer le POM parent et les construire séparément, en résolvant les dépendances à l'aide du référentiel local. L'inconvénient est que vous devez installer ou déployer un module pour que ses dépendants puissent voir les modifications.

Vous pouvez également vous intéresser au nouveau Maven 2.1 M1, qui contient des améliorations de vitesse significatives.

Si cela ne vous aide pas, publiez plus de détails sur la configuration de votre projet (structure des modules et plugins), les paramètres de ligne de commande et la configuration matérielle (mémoire et disque). Exécuter Maven avec -X pourrait également indiquer où cela prend son temps.

J'utiliserais Nexus installé localement.

Initialement, vous devriez obtenir une analyse plus précise de vos temps de construction en utilisant quelque chose comme this . et identifier les candidats qui prennent le plus de temps.

Les tests créent-ils une base de données H2 par test? Est-ce que le téléchargement de fichiers JAR externes prend du temps? Cela guidera où concentrer votre enquête. Le simple fait d’appliquer des indicateurs de rapidité ne fonctionne généralement pas, car ils auraient déjà été inclus par défaut et vous ne souhaitez pas sacrifier vos tests avec des indicateurs de saut.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top