web-dev-qa-db-fra.com

Comment puis-je accélérer la construction de maven2?

J'utilise un artificiel local pour proxyer la demande, mais les phases de construction et de test sont encore un peu lentes. Ce ne sont pas la compilation proprement dite et les tests qui sont lents, c'est le "réchauffement" du framework maven2. Des idées?

31
s3v1

Il y a 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’une astuce simple: renommer le dossier «cible» au lieu de supprimer.

Pour plus de détails, reportez-vous à Accélérer la construction de Maven .

23
Roman

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.

Celles-ci incorporeront 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 crée 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.

Reportez-vous également à obtenez plus de vitesse avec votre build maven2 .

9
Henry B

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

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.

7
facundofarias
  1. Ajustez les configurations de mémoire de manière optimale, par exemple pour: ajoutez cette ligne à mvn.bat Et définissez 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. < quickClean >

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

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

  5. Désactiver les opérations non critiques pendant la phase de construction: analyse, génération de javadoc, empaquetage source. Cela fera économiser un temps énorme.

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

    J'espère que ça aide.

4
Sinto K Itteera

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

3
user6987

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 pencher sur le nouveau Maven 2.1 M1, qui contient des améliorations significatives en termes de vitesse.

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 peut également indiquer où cela prend son temps.

2
ddimitrov

J'utiliserais Nexus installé localement.

1
Sergey Aldoukhov

Au début, vous devriez obtenir une analyse plus fine de vos temps de construction en utilisant quelque chose comme ceci 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 défilement ne fonctionne généralement pas, car ils auraient déjà été inclus par défaut et vous ne voulez pas sacrifier vos tests avec des indicateurs de saut.

0
Tom Chamberlain