2010-10-06 3 views
5

J'emballage la construction d'un projet web qui prend en charge deux modes de fonctionnement:ignée de définir des dépendances pour les deux jetée: course et déploiement

  • utilisant mvn jetty-run localement;
  • déployé sur un serveur d'application.

Pour le serveur d'applications, de nombreuses bibliothèques sont marquées provided, sinon des conflits de chemin de classe se produisent. Dans le même temps, j'ai redéclaré ces dépendances comme des dépendances de compilation pour le jetty-maven-plugin, sinon les objectifs ne fonctionnent pas correctement.

La construction fonctionne comme ça, mais j'ai un grand nombre de bibliothèques en double. Y a-t-il une façon plus propre de faire cela?

Répondre

3

Juste pour suivre ce JETTY-429 a été fusionné de sorte que vous pouvez avec précaution ajouter un configuration parameter<useProvidedScope>true</useProvidedScope>. Cela inclura les dépendances fournies sur le chemin jetty plugin.

Il mérite d'être lu JETTY-429 pour plus de détails sur les problèmes potentiels à l'aide de cette option peut apporter.

2

Eh bien, il y a toujours la solution de portillon. (Il ne doit rien faire avec le portillon, mais il peut être trouvé dans le wicket maven archetype.)

Utilisez une classe principale qui lance la jetée par programmation avec le projet en tant que contexte webapp. Cela devrait ramasser toutes les dépendances maven même dans la portée fournie sur tous les principaux IDE. Voici une telle classe:

public class Start{ 

    private static final Logger LOG = Logger.getLogger(Start.class); 

    public static void main(final String[] args) throws Exception{ 
     LOG.addAppender(new ConsoleAppender(new SimpleLayout(), "system.out")); 
     final Server server = new Server(); 
     final SocketConnector connector = new SocketConnector(); 

     // Set some timeout options to make debugging easier. 
     connector.setMaxIdleTime(1000 * 60 * 60); 
     connector.setSoLingerTime(-1); 
     connector.setPort(9090); 
     server.setConnectors(new Connector[] { connector }); 

     final WebAppContext bb = new WebAppContext(); 
     bb.setServer(server); 
     bb.setContextPath("/"); 
     bb.setWar("src/main/webapp"); 
     server.addHandler(bb); 

     try{ 
      LOG.info(// 
      ">>> STARTING EMBEDDED JETTY SERVER, PRESS ANY KEY TO STOP" // 
      ); 
      server.start(); 
      System.in.read(); 
      LOG.info(">>> STOPPING EMBEDDED JETTY SERVER"); 
      server.stop(); 
      server.join(); 

     } catch(final Exception e){ 
      LOG.error("Something bad happened", e); 
      System.exit(100); 
     } 
    } 

    // CHECKSTYLE:ON 
} 

La belle partie: vous pouvez lancer ceci comme une configuration d'exécution d'éclipse standard, y compris un débogage facile. L'inconvénient: vous avez besoin jetée comme une dépendance provided supplémentaire:

<!-- JETTY DEPENDENCIES FOR TESTING --> 
<dependency> 
    <groupId>org.mortbay.jetty</groupId> 
    <artifactId>jetty</artifactId> 
    <version>${jetty.version}</version> 
    <scope>provided</scope> 
</dependency> 
<dependency> 
    <groupId>org.mortbay.jetty</groupId> 
    <artifactId>jetty-util</artifactId> 
    <version>${jetty.version}</version> 
    <scope>provided</scope> 
</dependency> 
+0

Intéressant, je vais jeter un coup d'oeil. –

+0

En effet, intéressant "contourner".+1 –

2

Je ne dis pas que c'est la meilleure solution, mais que diriez-vous faire ceci:

  1. Vos dépendances par défaut lister les dépendances fournies comme fourni". La configuration de projet par défaut doit produire des fichiers WAR qui seront exécutés sur des serveurs non-Jetty.
  2. Définissez un profil "jetty" et redéclarez les dépendances fournies dans la portée de la compilation. Il suffit ensuite de lancer mvn -Pjetty jetty: run

Il se peut que ce ne soit pas la solution la plus propre au monde, car cela oblige à la répétition, mais cela devrait être fait pour vous.

+0

+1 parce que cela fonctionne, pas pour DRYness :) Mais de toute façon, je me demande pourquoi les dépendances 'fournies 'ne sont pas ajoutées lors de l'utilisation de [' useTestClasspath'] (http://jetty.codehaus.org/jetty/maven -plugin/run-mojo.html # useTestClasspath). Cela ne semblerait pas mal à mon humble avis. –

+0

Ce que Pascal a dit :-). Il contient plus ou moins la même duplication que ma solution actuelle, donc je ne suis pas très enclin à la changer. –

2

Je voudrais aussi une sorte de drapeau pour être en mesure d'inclure provided dépendances scope lors de l'exécution jetée. En fait, Jetty a déjà un useTestClasspath faisant quelque chose de similaire pour test dépendances sectorielles (pourquoi ne pas inclure les dépendances provided dans ce cas) afin d'éviter d'avoir à dupliquer les dépendances dans un profil. Ceci est suivi par JETTY-429 qui a un correctif pour un tel drapeau.

+0

Intéressant, merci. –

+0

les références de chemin de classe sont une bonne idée (+1) –

Questions connexes