我試圖從eclipse Indigo啓動一個簡單的java maven webapp,它只包含一個類,一個基本的帶註釋的websocket。我希望註釋掃描能夠使用sourceforge eclipse-jetty plugin自動識別和註冊該類,它被配置爲使用我自己的本地碼頭分發9.1.1.v20140108。代碼的網頁套接字如下:如何獲得eclipse-jetty插件來掃描並識別websocket類?
package com.myapp.websocket_sample;
import java.io.IOException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
import javax.websocket.EncodeException;
import javax.websocket.OnClose;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.ServerEndpoint;
@ServerEndpoint(value = "/ws/broadcast", encoders = {}, decoders = {})
public class TestWebsocket {
private static final Set<Session> sessions = Collections.synchronizedSet(new HashSet<Session>());
private static final Logger logger = LoggerFactory.getLogger(TestWebsocket.class);
public TestWebsocket() {
logger.info("Initializing websocket.");
}
@OnOpen
public void onOpen(final Session session) {
logger.info("Opening new websocket session.");
sessions.add(session);
}
@OnClose
public void onClose(final Session session) {
logger.info("Closing new websocket session.");
sessions.remove(session);
}
@OnMessage
public void onMessage(final String message, final Session client) throws IOException, EncodeException {
logger.info("Got message {}.", message);
for (final Session session : sessions) {
session.getBasicRemote().sendObject(message);
}
}
}
當在Eclipse的碼頭開始,網頁套接字類顯然不被識別和碼頭掃描。在查看eclipse-jetty插件使用的(自動生成的)jetty.xml時,該類似乎位於extraClasspath選項上。
<Set name="handler">
<New class="org.eclipse.jetty.webapp.WebAppContext">
<Arg type="String">src/main/webapp</Arg>
<Arg type="String">/ws-sample</Arg>
<Set name="extraClasspath">C:/Users/padolan/AppData/Local/eclipse-workspaces/websockets/websocket-sample/target/classes;C:/Users/padolan/.m2/repository/javax/websocket/javax.websocket-api/1.0/javax.websocket-api-1.0.jar;C:/Users/padolan/.m2/repository/org/slf4j/slf4j-api/1.6.1/slf4j-api-1.6.1.jar</Set>
</New>
</Set>
我可以在同一個項目(建成使用maven戰爭文件),將其複製到碼頭分佈的webapps文件夾中,並使用碼頭start.jar像這樣啓動它,WebSocket的拾取並提供:
java -jar start.jar --module=webapp,websocket
我懷疑我需要一些特殊的碼頭配置或其他類添加到Eclipse的插件碼頭的類路徑得到它拿起註釋WebSocket的類,但我不知道那應該是什麼。有什麼建議麼?