Question

MODIFIER:Je pense que je devrais clarifier mon intention...

J'essaie de simplifier le cycle d'itération de développement de write-code >> build WAR >> déployer >> actualiser >> répéter.J'aimerais être relativement indépendant de l'IDE (c'est-à-dire que je ne veux pas que les plug-ins Eclipse ou IntelliJ fassent le travail).Je veux pouvoir éditer du code/fichiers statiques et les intégrer selon les besoins dans mon répertoire source WAR, et simplement exécuter/déboguer la configuration en tant qu'appel de ligne de commande vers une installation centralisée de Jetty.

Plus tard, j'aimerais pouvoir effectuer le déploiement réel en utilisant généralement la même configuration mais avec un WAR packagé.Je ne souhaite pas que le code de mon application soit spécifique à mon IDE ou à Jetty.

Alors peut-être qu'une meilleure façon de poser cette question est Selon vous, quelle est la manière la plus propre d'utiliser Jetty comme serveur d'applications de développement/débogage ?


Supposons que je souhaite avoir une installation minimale de Jetty 7.Je veux une configuration XML aussi minimale que possible, j'ai juste besoin de l'API Servlet brute, pas de JSP, pas de filtrage, etc.Je veux juste pouvoir disposer de servlets personnalisés et disposer de fichiers statiques s'ils existent.Ce sera le seul WAR et il servira de racine pour un port donné.

Idéalement, pour faciliter le déploiement, j'aimerais que le répertoire Jetty soit simplement le téléchargement standard et que ma configuration WAR/XML soit séparée de ces fichiers Jetty standard.Dans mon invocation de Jetty, j'aimerais transmettre ce XML minimal et c'est parti.

Je constate que la documentation est partout et qu'une grande partie est destinée à Jetty 6 ou spécifique à divers autres packages (Spring, etc.).Je pense que si j'ai cette configuration minimale, l'ajout d'abstractions supplémentaires par-dessus sera beaucoup plus propre.Cela me permettra également de gérer plus proprement les scénarios de jetée intégrée.

Cette question SO est un exemple de scénario où ce XML serait utile Jetty Run War En utilisant uniquement la ligne de commande

Quel serait le XML minimal nécessaire pour spécifier cet emplacement WAR et les hôtes/port pour le servir ?

Merci d'avance pour tous les extraits ou liens.

Était-ce utile?

La solution

Jetty a migré vers Eclipse.Il existe des informations très subtiles à ce sujet.Cela a également entraîné un changement de nom du package, ce qui constitue un autre niveau de nuance.Ils ont publié un utilitaire pour convertir le paramètre Jetty6 en paramètre Jetty 7, mais encore une fois - pas très populaire.Je suis déçu du forum Eclipse Jetty.Voici où vous devriez rechercher de la documentation sur Jetty 7 et versions ultérieures http://wiki.eclipse.org/Jetty/Starting

je pense que c'est le minimum jetty.xml pris à partir de http://wiki.eclipse.org/Jetty/Reference/jetty.xml

<?xml version="1.0"?>
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure.dtd">\ 
<Configure id="Server" class="org.eclipse.jetty.server.Server">
</Configure>

Mais j'aimerais plutôt partir d'une copie de $JETTY_HOME/etc/jetty.xml et je modifierais à partir de là.

Si tu es d'accord avec $JETTY_HOME/webapps répertoire, vous pouvez configurer le port en modifiant cette partie

<Configure id="Server" class="org.eclipse.jetty.server.Server">
    ...
    <Call name="addConnector">
      <Arg>
          <New class="org.eclipse.jetty.server.nio.SelectChannelConnector">
            <Set name="host"><Property name="jetty.host" /></Set>
            <Set name="port"><Property name="jetty.port" default="7777"/></Set>
            <Set name="maxIdleTime">300000</Set>
            <Set name="Acceptors">2</Set>
            <Set name="statsOn">false</Set>
            <Set name="confidentialPort">8443</Set>
        <Set name="lowResourcesConnections">20000</Set>
        <Set name="lowResourcesMaxIdleTime">5000</Set>
          </New>
      </Arg>
    </Call>
    ....
</Configure>

Sinon je modifierai context.xml la manière expliquée ici (pour Jetty 7) Comment servir la webbapp A depuis le portA et la webapp B depuis le portB

Consultez également ces pages :

....Modification n°1 :désolé pour la mauvaise URL pour l'application Web par connecteur.J'ai mis à jour le lien vers Comment servir la webbapp A depuis le portA et la webapp B depuis le portB pour pointer vers le document destiné à Jetty 7.


Mise à jour sur « Comment gérez-vous Jetty dans différents environnements ? »

Développeur

Nous utilisons Maven, donc Embedded Jetty fonctionne pour nous.Nous venons de courir mvn clean install run:jetty et le port est configuré dans le fichier de configuration de Maven, à savoir pom.xml.C'est pas Dépendant de l'IDE et Jetty peuvent facilement être intégrés à l'aide d'ANT, mais je n'ai jamais essayé.

Test

Nous avons une jetée autonome en fonctionnement.J'ai configuré le port et réglé les paramètres, supprimé les applications par défaut (par ex.root.war etc) et créé un context.xml avec des ports spécifiques à l'application et un répertoire de déploiement.(Malheureusement, j'ai posé cette question sur la liste de diffusion d'Eclipse Jetty et personne n'a pris la peine de répondre).Il s’agit d’un réglage unique.

Pour les versions/déploiements de test, nous disposons d'un script de construction qui crée le WAR selon les spécifications de l'environnement de test, puis le télécharge dans l'environnement de test.Après cela, nous invoquons un script shell qui (1) arrête Jetty, (2) copie le fichier war dans le répertoire webapp de myApp et (3) redémarre Jetty.

Cependant, un moyen plus simple de procéder consiste à utiliser le plugin Cargo de Maven.Le malheur était que j'utilisais Jetty 7.1.6 qui était incompatible avec Cargo.Plus tard, ils l'ont réparé, mais j'avais fait mon travail avec un script personnalisé.

Produit

Prod a presque la même procédure que test, sauf.Les réglages sont effectués pour une sécurité et un équilibrage de charge plus élevés.Mais du POV de déploiement, il n'y a rien de différent du scénario de test à la production.

Notez que je ne me suis pas préoccupé de ce que sont les fichiers XML et du nombre qui doit s'y trouver.Je viens d'utiliser ceux qui me préoccupent -- jetty.xml et context.xml.De plus, j'ai trouvé que c'était beaucoup plus propre à utiliser jetty.conf et jetty.sh pour transmettre les paramètres JVM, les XML personnalisés et pour démarrer et arrêter.

J'espère que cela t'aides.


En déploiement à chaud :

Maintenant, si vous utilisez Maven et utilisez Jetty intégré.Il sait juste quand le code est modifié – comme « renifleur de coups de feu ».Dans dev envt, vous exécutez Jetty, apportez des modifications, actualisez la page et voyez vos modifications -- déploiement à chaud.Trouvez-en plus ici http://docs.codehaus.org/display/JETTY/Maven+Jetty+Plugin chercher scanIntervalSeconds

Autres conseils

Cela ne répond pas pleinement à votre question, mais au cas où cela vous aidera, voici un code assez minimal en utilisant Jetty 7 pour tirer un serveur avec un servlet root:

    HandlerCollection handlers = new HandlerCollection();
    ServletContextHandler root = new ServletContextHandler(handlers, "/", ServletContextHandler.NO_SESSIONS|ServletContextHandler.NO_SECURITY);
    root.addServlet(new ServletHolder(new MyServlet()), "/*");

    Server server = new Server(8080);
    server.setHandler(handlers);
    server.start();

Voir bien sûr http://wiki.eclipse.org/jetty/tutorial/embedding_jetty.

Si vous construisez avec Maven (qui est IDE indépendant), vous devez déboguer avec le plugin Maven Jetty. Fondamentalement, vous exécutez l'application en tant que "MVN Jetty: Exécuter" sur la ligne de commandement, tout fonctionne sans avoir à faire de redéploiement. La plupart des bons IDE comment le support Maven a-t-il intégré et vous permet d'exécuter / déboguer l'application en tant que maven; Cela signifie que Maven est exécuté qui démarre le plugin de jetée qui démarre l'application et vous pouvez le déboguer. Étant donné que tout est à court des dossiers IDE Source et Bin, vous n'avez même pas besoin d'une installation de serveur de jetée.

Voici un projet de démonstration qui fonctionne de cette façon https://github.com/simbo1905/zktodo2/blob/master/commandline.build.and.run.txt Et voici comment l'exécuter sous Eclipse https://github.com/simbo1905/zktodo2/blob/master/eclipse.indigo.build.and.debug.txt Mais tout IDE qui comprend Maven devrait fonctionner. Jetez un œil au pom.xml où il configure le plugin de jetée Maven.

J'utiliserais Gradle et scannerais le dossier de sortie de build toutes les quelques secondes pour des modifications de la construction.

Dans un fichier build.gradle:

apply plugin: 'jetty'

...

jettyRun.doFirst {
    // set system properties, etc here for bootstrapping
}

jettyRun {
    httpPort = 8989
    reload = 'automatic'
    scanIntervalSeconds = 3
    daemon = false
}

C'est ça. Vous pouvez choisir d'avoir la construction automatique IDE pour vous et pointer de ce répertoire. Mais vous pouvez également choisir de ne pas le faire. Cette solution n'est pas du tout liée à un IDE.

Je pensais que je mettrais à jour avec ce que je fais maintenant. J'ai écrit une minuscule ligne de ligne de commande / archétype Maven qui fonctionne comme la façon dont je pensais que tout cela aurait dû avoir en premier lieu. L'application bootstrap vous permet de lancer votre conteneur de servlet de choix (Jetty, Tomcat, Glassfish) en le faisant simplement passer le chemin vers la guerre et votre port.

À l'aide de maven, vous pouvez créer et emballer votre propre instance de cette application simple:

mvn archetype:generate \
    -DarchetypeGroupId=org.duelengine \
    -DarchetypeArtifactId=war-bootstrap-archetype \
    -DarchetypeVersion=0.2.1

Ensuite, vous le lancez comme ceci:

java -jar bootstrap.jar -war myapp.war -p 8080 --jetty

Voici la source de l'utilitaire et de l'archétype: https://bitbucket.org/mckamey/war-bootstrap

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