Frage

BEARBEITEN:Ich denke, ich sollte meine Absicht klarstellen ...

Ich versuche, den Entwicklungsiterationszyklus von Code schreiben >> WAR erstellen >> bereitstellen >> aktualisieren >> wiederholen zu vereinfachen.Ich möchte relativ unabhängig von der IDE sein (d. h. ich möchte nicht, dass Eclipse- oder IntelliJ-Plug-Ins die Arbeit erledigen).Ich möchte in der Lage sein, Code/statische Dateien zu bearbeiten und nach Bedarf in mein WAR-Quellverzeichnis zu kompilieren und lediglich die Ausführung/Debug-Einrichtung als Befehlszeilenaufruf für eine zentralisierte Jetty-Installation durchzuführen.

Später möchte ich die eigentliche Bereitstellung mit im Wesentlichen demselben Setup, aber mit einer gepackten WAR-Datei durchführen können.Ich möchte nicht, dass mein App-Code spezifisch für meine IDE oder Jetty ist.

Vielleicht ist es besser, diese Frage zu stellen Was ist Ihrer Meinung nach die sauberste Möglichkeit, Jetty als Entwicklungs-/Debug-App-Server zu verwenden?


Angenommen, ich möchte eine minimale Jetty 7-Installation haben.Ich möchte eine möglichst minimale XML-Konfiguration, ich benötige nur die rohe Servlet-API, kein JSP, keine Filterung usw.Ich möchte nur in der Lage sein, einige benutzerdefinierte Servlets zu haben und statische Dateien bereitzustellen, falls vorhanden.Dies wird der einzige WAR sein und als Root für einen bestimmten Port dienen.

Um die Bereitstellung zu vereinfachen, möchte ich im Idealfall, dass das Jetty-Verzeichnis nur der Standard-Download ist und meine WAR-/XML-Konfiguration von diesen Standard-Jetty-Dateien getrennt ist.Bei meinem Aufruf von Jetty möchte ich dieses minimale XML übergeben und loslegen.

Ich stelle fest, dass die Dokumentation überall ist und ein Großteil davon für Jetty 6 oder spezifisch für verschiedene andere Pakete (Spring usw.) ist.Ich denke, wenn ich diese Minimalkonfiguration heruntergefahren habe, wäre das Hinzufügen zusätzlicher Abstraktionen viel sauberer.Außerdem kann ich so besser mit eingebetteten Jetty-Szenarien umgehen.

Diese SO-Frage ist ein Beispielszenario, in dem dieses XML nützlich wäre Jetty Run War nur über die Befehlszeile

Was wäre das minimale XML, das für die Angabe dieses einen WAR-Speicherorts und der Hosts/Ports, die ihn bedienen sollen, erforderlich wäre?

Vielen Dank im Voraus für alle Ausschnitte oder Links.

War es hilfreich?

Lösung

Jetty ist auf Eclipse migriert.Hierzu gibt es sehr subtile Informationen.Dies führte auch zu einer Änderung des Paketnamens, was eine weitere Nuancenebene darstellt.Sie haben zwar ein Dienstprogramm zum Konvertieren der Jetty6-Einstellung in die Jetty 7-Einstellung veröffentlicht, aber auch hier ist es nicht sehr beliebt.Ich bin vom Eclipse Jetty-Forum enttäuscht.Hier sollten Sie nach Dokumentation ab Jetty 7 suchen http://wiki.eclipse.org/Jetty/Starting

Ich denke, das ist das Minimum jetty.xml genommen von 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>

Aber ich würde lieber mit einer Kopie beginnen $JETTY_HOME/etc/jetty.xml und würde von dort aus ändern.

Wenn Sie damit einverstanden sind $JETTY_HOME/webapps Verzeichnis können Sie den Port einrichten, indem Sie diesen Teil ändern

<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>

Ansonsten werde ich es ändern context.xml der hier erläuterte Weg (für Jetty 7) So stellen Sie Webbapp A von PortA und Webapp B von PortB bereit

Beachten Sie auch diese Seiten:

....Bearbeiten Nr. 1:Entschuldigung für die falsche URL für die Webanwendung pro Connector.Ich habe den Link zu aktualisiert So stellen Sie Webbapp A von PortA und Webapp B von PortB bereit um auf das Dokument zu verweisen, das für Jetty 7 gedacht ist.


Aktualisieren zum Thema „Wie gehen Sie mit Jetty in verschiedenen Umgebungen um?“

Entwickler

Wir verwenden Maven, daher funktioniert eingebettetes Jetty für uns.Wir rennen einfach mvn clean install run:jetty und der Port ist in der Konfigurationsdatei von Maven konfiguriert, nämlich pom.xml.Das ist nicht IDE-abhängig und Jetty kann problemlos mit ANT eingebettet werden, aber ich habe es nie versucht.

Prüfen

Wir haben einen eigenständigen Jetty-Betrieb.Ich habe den Port konfiguriert und Parameter optimiert, Standard-Apps entfernt (z. B.root.war usw.) und eine context.xml mit anwendungsspezifischen Ports und einem Bereitstellungsverzeichnis erstellt.(Leider habe ich diese Frage auf der Mailingliste von Eclipse Jetty gestellt und niemand hat sich die Mühe gemacht, sie zu beantworten.)Dies ist eine einmalige Einstellung.

Für Test-Builds/-Bereitstellungen verfügen wir über ein Build-Skript, das die WAR gemäß den Spezifikationen der Testumgebung erstellt und sie dann in die Testumgebung hochlädt.Danach rufen wir ein Shell-Skript auf, das (1) Jetty stoppt, (2) die WAR-Datei in das Webapp-Verzeichnis von myApp kopiert und (3) Jetty neu startet.

Eine einfachere Möglichkeit hierfür ist jedoch die Verwendung des Cargo-Plugins von Maven.Das Pech war, dass ich Jetty 7.1.6 verwendete, das nicht mit Cargo kompatibel war.Später haben sie es behoben, aber ich hatte meine Arbeit mit einem benutzerdefinierten Skript erledigt.

Prod

Prod hat fast das gleiche Verfahren wie Test, außer.Die Optimierungen dienen der höheren Sicherheit und dem Lastenausgleich.Aber vom Bereitstellungs-POV her gibt es keinen Unterschied zwischen Testfall und Produkt.

Beachten Sie, dass ich mich nicht darum gekümmert habe, was XML-Dateien sind und wie viele davon vorhanden sein müssen.Ich habe nur diejenigen verwendet, die mir Sorgen bereiten – jetty.xml Und context.xml.Außerdem fand ich, dass die Anwendung viel sauberer ist jetty.conf Und jetty.sh zum Übergeben von JVM-Parametern, benutzerdefinierten XMLs und zum Starten und Stoppen.

Hoffe das hilft.


Bei Hot-Bereitstellung:

Wenn Sie nun Maven verwenden und eingebettetes Jetty verwenden.Es weiß einfach, wann der Code geändert wird – wie ein „Schussschnüffler“.In der Entwicklungsumgebung führen Sie Jetty aus, nehmen Änderungen vor, aktualisieren die Seite und sehen Ihre Änderungen – Hot-Bereitstellung.Weitere Informationen finden Sie hier http://docs.codehaus.org/display/JETTY/Maven+Jetty+Plugin Suche scanIntervalSeconds

Andere Tipps

0 generasacodicetagpre.

sehen natürlich http://wiki.eclipse.org/jetty/tutorial/embeding_jetty .

Wenn Sie mit Maven bauen (was ide unabhängig ist), dann sollten Sie mit dem MAVEN-Anlegestet-Plugin debuggen. Grundsätzlich führen Sie die App als "MVN-Jety: Run" auf der KommandoLine aus, alles funktioniert nur, ohne eine Umsteuerung durchführen zu müssen. Die meisten guten Ides Wie haben MAVEN-Unterstützung eingebaut und können Sie die App als MAVEN rennen / debuggen lassen. Das heißt, dass MAVEN ausgeführt wird, der das Jetty-Plugin startet, das die App startet, und Sie können sie debuggen. Da alles aus den IDE-Quell- und Bin-Ordnern ausgeführt wird, benötigen Sie nicht einmal eine Jetty-Server-Installation.

Hier ist ein Demo-Projekt, das auf diese Weise läuft https : //github.com/simbo1905/zktodo2/blob/master/commandline.build.and.run.txt und hier ist es, wie man sie unter Eclipse https://github.com/simbo1905/zktodo2/blob/master/clipse.indigo.build.and. debug.txt , aber jede IDE, die das Maven versteht, sollte funktionieren. Schauen Sie sich den Pom.xml an, wo er das MAVEN-JETTY-Plugin aufnimmt.

Ich würde Gradle verwenden und den Build-Ausgangsordner alle paar Sekunden lang scannen, um den Build zu ändern.

In einer Build.Gradle-Datei: generasacodicetagpre.

das ist es.Sie können den IDE-AUTO-Build für Sie auswählen und in diesem Verzeichnis hinweisen.Sie können aber auch nicht wählen.Diese Lösung ist überhaupt nicht zu einer IDE verbunden.

Ich dachte, ich würde mit dem aktualisieren, was ich jetzt tue.Ich habe eine winzige Befehlszeile App / Maven Archetype geschrieben, die funktioniert, wie ich dachte, dass dies alles in erster Linie haben sollte.Mit der Bootstrap-App können Sie Ihren Servlet-Container von Wahl (Anlegestelle, Tomcat, Glassfish) starten, indem Sie ihn einfach den Pfad zum Krieg und Ihren Port weitergeben.

Verwenden von MAVEN, Sie können Ihre eigene Instanz dieser einfachen App erstellen und verpacken: generasacodicetagpre.

Dann starten Sie es so: generasacodicetagpre.

Hier ist die Quelle für das Dienstprogramm und das Archetyp: https://bitbucket.org/mckamey/war-Bootstrap

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top