2016-03-01 29 views
6

próbuję osadzić serwera Jetty w aplikacji i widzę naprawdę dziwny problem:Jetty 9 Serwer ma start() metodę

Według dokumentacji, prosty serwer (który buduję jako test) można uruchomić za pomocą następującego kodu:

import org.eclipse.jetty.server.Server; 

public class SimpleServer throws Exception 
{ 

    public static void main(String[] args) 
    { 
     Server server = new Server(8080); 

     server.start(); 
     server.join(); 
    } 

} 

wierzę, że poprawny plik Jar z pobranego pomost:

pomost-server-9.3.7.v20160115.jar

Niestety, widzę, że klasa serwera, której używam, nie ma publicznej metody start(). Ma chronioną metodę start(), która ma parametr LifeCycle, ale to jest to. Publiczna metoda start() wymieniona w dokumentacji (i w kilku odpowiedziach tutaj w Stack Overflow) nie istnieje!

Czy używam właściwej klasy serwera? Jeśli nie, to gdzie dostanę właściwy?

Ktoś proszę doradzić ...

Odpowiedz

4

Potrzebujesz również dodać "jetty-util- {version}" do swojego projektu, a to rozwiąże problem. Albo możesz użyć maven w swoim projekcie i dodać "jetty-server- {version}" jako zależność maven. Maven automatycznie pobierze wszystkie słoiki z serwera-pomostu (w tym jetty-util- {version}).

+0

Nie rozumiem, jak to pomoże. Mam oba słoiki w moich zależnościach i metoda jest nadal chroniona. Nie mogę znaleźć żadnych przykładów, które w ogóle potwierdzają tę kwestię. – mdhirsch

+0

Po dodaniu tej zależności - użyje metody AbstractLifeCycle.start. Jeśli dodałeś "jetty-util- {version}" - odśwież projekt, a teraz powinna być dostępna publiczna metoda Server.start bez parametrów. – rholovakha

+0

Pracowałem dla mnie. Dzięki. Byłem z dala od Javy przez jakiś czas i, o ile pamiętam, nie było czegoś takiego jak metoda rozszerzenia (jak C#). Ta odpowiedź byłaby świetna, gdyby wyjaśniono mechanikę za nią. – user666412

1

Nie ma problemu tutaj.

Publiczny modyfikator Server.start() istnieje i istnieje od (przynajmniej) Jetty 5,0 dni.

Nie wiem, jakiej biblioteki/kompilacji używasz, ale ta metoda nie jest chroniona, w klasie Server, klasie AbstractLifeCycle (abstrakcyjnej) lub nawet LifeCycle.

+0

W Jetty 9.2.14 jest zdecydowanie chronione. Oto nieco starszy javadoc, który pokazuje go również jako chroniony http://download.eclipse.org/jetty/stable-9/apidocs/org/eclipse/jetty/server/Server.html – mdhirsch

+0

@mdhirsch 'start (LifeCycle)' (protected/internal) to nie to samo co 'start()' (public/api). –

-1

Server.start() jest chroniony. Jeśli napiszesz klasę MyJetty, która nie robi nic poza rozszerzeniem serwera pomostowego i jest klasą wewnętrzną, możesz wywołać na niej metodę start().

Oto co zrobiłem w klasie, który chciał uruchomić Jetty()

/** 
* Extend the jetty server just so you can call the protected method start() 
*/ 
static class MyJettyServer extends Server { 

    public MyJettyServer(int port) { 
     super(port); 
    } 
} 

To wydaje się bardzo dużo złej odpowiedzi, ale to działało.

0
public abstract interface org.eclipse.jetty.util.component.LifeCycle 

jest w jetty-util-{version}.jar dodać ten słoik do projektu ścieżki kompilacji