我在处理已转换为使用 SBT(之前纯粹基于 Eclipse)的现有 Java 项目时遇到了这个问题。org.my.FooServlet
即使 Eclipse(仍在使用 Eclipse 和 sbteclipse)报告映射/FooServlet
到org.my.FooServlet
.
因此,为了排除一些可能源于将项目转换为使用 SBT 的问题(例如,一些缺少的依赖项,或者隐藏或看似不相关的(错误)配置问题),我继续创建了一个新的 SBT 项目来尝试重现问题的复杂性最小。所以我目前有以下配置/代码/输出,但仍然遇到问题:
container:start
输出:
[info] jetty-9.1.0.v20131115
[info] Started o.e.j.w.WebAppContext@33c4522{/,[file:/Users/erik.allik/code/scala/webtest/src/main/webapp/],AVAILABLE}
[info] Started ServerConnector@52879ec6{HTTP/1.1}{0.0.0.0:8080}
[success] Total time: 0 s, completed 25.11.2013 14:39:34
build.sbt
:
scalaVersion := "2.10.3"
libraryDependencies ++= Seq(
"org.eclipse.jetty" % "jetty-webapp" % "9.1.0.v20131115" % "container",
"org.eclipse.jetty" % "jetty-jsp" % "9.1.0.v20131115" % "container",
"org.eclipse.jetty" % "jetty-servlet" % "9.1.0.v20131115" % "container",
"org.eclipse.jetty" % "jetty-servlets" % "9.1.0.v20131115" % "container",
"org.eclipse.jetty" % "jetty-annotations" % "9.1.0.v20131115" % "container",
"org.eclipse.jetty" % "jetty-plus" % "9.1.0.v20131115" % "container",
"org.eclipse.jetty.orbit" % "javax.servlet" % "3.0.0.v201112011016" artifacts (Artifact("javax.servlet", "jar", "jar"))
)
seq(webSettings :_*)
project/plugins.sbt
:
addSbtPlugin("com.earldouglas" % "xsbt-web-plugin" % "0.4.2")
src/main/java/webtest/TestServlet.java
:
package webtest;
// ...
@WebServlet(urlPatterns = { "/test" }, loadOnStartup = 1)
public class TestServlet extends HttpServlet {
@Override public void init() { System.out.println("init"); }
@Override protected void doGet(HttpServletRequest request, HttpServletResponse response) { System.out.println("GET"); }
}
src/main/webapp/WEB-INF/web.xml
:(完全删除它没有区别)
<?xml version="1.0" encoding="UTF-8"?>
<web-app
xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" xsi:schemalocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id="WebApp_ID" version="3.0" metadata-complete="false">
</web-app>
每当我编辑和保存两个代码文件中的任何一个时,都会重新加载容器,并且文件已被编译,因此至少 SBT 正在拾取它们;现在的问题是,为什么不是 Jetty。我也尝试过(在原始项目中,而不是测试虚拟项目中)将所有类从下面复制target/scala-2.10/classes
到src/main/webapp/WEB-INF/classes
无济于事。