2014-10-30 4 views
7

Ich habe Anlegestelle Anlegestelle-9.2.3.v20140905Wie platziere ich Gläser in Jetty/Lib auf dem Jetty Classpath?

war mein Verständnis, dass Gläser in lib/jar oder lib/ext automatisch auf dem Classpath waren, aber das alte Verhalten von Anlegesteg gewesen sein mag 8.

Ich versuche eine Webapp mit Websockets zu implementieren. Mit meiner implementierten WAR-Datei im webapps-Verzeichnis beschwert sich Jetty, dass es keine Jugs finden kann, die genau dort im Jetty/Lib-Verzeichnis sitzen (Jetty-http, Jetty-Io, Jetty-Sicherheit, Jetty-Server, Jetty-Servlet, Anlegestelle). util sind die, die meine Webapp muss, dass es nicht finden können)

Gläser platziert in lib/ext auch nicht abgeholt, wenn ich einen --module-ext

Wie kann ich dieses Problem lösen?

die Antwort unten zu beheben, (die ursprüngliche Frage Bearbeitung) Ich habe versucht, den Server-Modul ermöglicht, deren server.mod-Datei enthält die folgenden Zeilen:

[lib] 
lib/servlet-api-3.1.jar 
lib/jetty-schemas-3.1.jar 
lib/jetty-http-${jetty.version}.jar 
lib/jetty-server-${jetty.version}.jar 
lib/jetty-xml-${jetty.version}.jar 
lib/jetty-util-${jetty.version}.jar 
lib/jetty-io-${jetty.version}.jar 

in der Befehlszeile, mache ich

java -jar start.jar --module=server jetty.port=8182 

und das Ergebnis ist:

2014-10-30 15:26:13.907:WARN:oejuc.AbstractLifeCycle:main: FAILED 
or[email protected]2635068e: 
java.lang.NoClassDefFoundError: org/eclipse/jetty/server/Handler 
java.lang.NoClassDefFoundError: org/eclipse/jetty/server/Handler 

org.eclipse.jetty.server.Handler ist genau dort in Jetty-Server-Glas sitzt in meinem Jetty/Lib-Verzeichnis.

Vielleicht sind die Variablen jetty.version oder jetty.base falsch?

Wenn ich führen eine

--list-classpath 

ich dort im Verzeichnis lib alle Gläser tun sehen.

Antwort

8

Welche Dokumentation lesen Sie? (Link bitte)

Das gesamte Konzept einer start.config existiert nur in Jetty 8 und früher.

Aktuelle Dokumentation ist bei http://www.eclipse.org/jetty/documentation/current/

Dieser Text für Jetty nicht gültig ist 9.2.3.v20140905

Es ist nie ein guter Grund, ALL der Gläser in lib/ im Server Classpath zur gleichen Zeit zu haben. In der Tat würde dies zu einer ungültigen Umgebung führen, da verschiedene Implementierungen mehrerer Kerntechnologien, die Sie ändern können (wie jsp, jstl und javax.el), existieren. Es gibt auch Bibliotheken in lib/, die optionale Bibliotheken von Drittanbietern benötigen (wie npn, alpn), die erfordern, dass Sie eine Lizenz bestätigen, bevor sie heruntergeladen werden.

Welche Bibliotheken geladen werden, kann entweder {jetty.home}/lib und/oder {jetty.base}/lib durch die Module bestimmt werden, die Sie in Ihrer Stegkonfigurations-Instanz aktiviert haben.

Um etwas über den Start zu erfahren, starten Sie.Glas, Befehlszeile, Module, Bibliotheken, XML-Konfiguration, Konfigurationseigenschaften, {jetty.base}, {jetty-dir} und {jetty.home}, die „Startup-Dokumentation“ finden Sie bei http://www.eclipse.org/jetty/documentation/current/startup.html

Um Ihre spezifischen Fragen zu Startsteg und Webapps zu adressieren.

Hier ist ein kurzes Beispiel {jetty.home} selbst (Auch dies ist alles in der "Startup Dokumentation" URL oben dokumentiert) (nicht empfohlen mehr, sondern arbeitet) mit:

# Unpack the distribution 
[~]$ unzip jetty-distribution-9.2.3.v20140905 
[~]$ cd jetty-distribution-9.2.3.v20140905 

# Copy your war into place 
[jetty-distribution-9.2.3.v20140905]$ cp ~/Projects/mywebapp.war webapps/ 

# Run Jetty 
[jetty-distribution-9.2.3.v20140905]$ java -jar start.jar 

Jetzt für das mehr geeignete Art und Weise, mit einem {jetty.base}:

# Unpack the distribution 
[~]$ unzip jetty-distribution-9.2.3.v20140905 

# Make a {jetty.base} directory to house your configuration 
[~]$ mkdir myappbase 
[~]$ cd myappbase 

# Since this is a new {jetty.base}, lets initialize it 
[myappbase]$ java -jar ../jetty-distribution-9.2.3.v20140905/start.jar \ 
    --add-to-start=http,logging,deploy,jsp,ext,resources 
INFO: http   initialised in ${jetty.base}/start.ini (appended) 
INFO: server   initialised in ${jetty.base}/start.ini (appended) 
INFO: logging   initialised in ${jetty.base}/start.ini (appended) 
MKDIR: ${jetty.base}/logs 
INFO: deploy   initialised in ${jetty.base}/start.ini (appended) 
MKDIR: ${jetty.base}/webapps 
...(snip)... 
MKDIR: ${jetty.base}/lib 
MKDIR: ${jetty.base}/lib/ext 
INFO: resources  initialised in ${jetty.base}/start.ini (appended) 
MKDIR: ${jetty.base}/resources 

# Lets see what we have now 
[myappbase]$ ls -F 
lib/ logs/ resources/ start.ini webapps/ 

# Copy your webapp into place 
[myappbase]$ cp ~/Projects/mywebapp.war webapps/ 

# Run Jetty 
[myappbase]$ java -jar ../jetty-distribution-9.2.3.v20140905/start.jar 
+0

ich denke, dass der Text von Jetty wurde 8. – user2197116

+0

ich denke, dass der Text von Jetty war der Fall 8.Is es nicht mehr dass alles in jetty.home/lib auf dem Klassenpfad ist? Was müsste ich tun, damit jede lib im Verzeichnis jetty.home/lib auf dem Klassenpfad steht? Lesen der Dokumentation, ich kopierte alles von lib in ext, und tat --module = ext von der Befehlszeile beim Starten von Anlegesteg, was nicht funktioniert hat. Ich habe auch versucht --module = http und --module = server, von denen keiner irgendeine Wirkung hatte. Wenn ich versuche, Klassen aus diesen Gläsern zu benutzen, kann der Steg den Krieg nicht laden und sagt, er könne die Klassen nicht finden. – user2197116

+1

Es gibt keinen guten Grund für alle Jars in '{jetty.home}/lib /', sich im Server-Klassenpfad zu befinden. Und es zu erzwingen wird auch nichts bringen. Aktualisieren Sie Ihre Frage, um genauer festzulegen, welches Ziel Sie erreichen möchten, z. B. "Ich möchte eine Webanwendung mit Jsps und Websockets bereitstellen". –

Verwandte Themen