我正在尝试使用EclipseIndigo和Tomcat服务器建立一个基本的helloworld项目。我用一个简单的servlet创建了一个动态项目。测试了servlet,运行良好。然后我启用了Maven支持,并将logback添加到我的pom中。我在servlet的doGet
方法中放入了一条日志记录语句。当运行servlet时,它抱怨找不到任何绑定,因为logback jar没有被复制到Eclipse tomcat实例中。我本想在这里找到发布的罐子:
${workspace}.metadata.pluginsorg.eclipse.wst.server.coretmp0
如何让Eclipse正确地使用WTP/Maven?我还试着安装了m2e wtp连接器,没有任何区别。
检查部署程序集(项目上的上下文菜单),必须有映射Maven依赖项->WEB-INF/lib。
来自ASP.NET背景,我发现让一个Web应用程序运行Eclipse WTP和Maven需要花费如此多的工作,尤其是当你自己学习的时候。希望这个快速入门指南能帮助其他人快速跟上进度。
有两种方法可以使用Maven在Eclipse WTP中运行hello-world项目。您可以创建一个动态web项目,然后添加Maven特性,也可以反其道而行之。
带更新站点的Eclipse的先决条件
-
"Web、XML、Java EE和OSGi企业开发"
http://download.eclipse.org/releases/indigo -
"Maven Integration For Eclipse"
http://download.jboss.org/jbosstools/updates/m2eclipse-wtp/ -
"Maven Integration for WTP"
http://download.jboss.org/jbosstools/updates/m2eclipse-wtp/
启动配置
-
从安装Tomcat 7的副本http://tomcat.apache.org/download-70.cgi
-
窗口->首选项->服务器->运行时环境
- 添加Apache Tomcat 7.0并选择本地安装目录
选项1:创建动态Web项目,然后添加Maven Nature
-
创建新的Maven项目,选择原型org.apache.maven.protypes:maven-rotype-webapp
-
更改为Java EE透视图。
-
创建一个新的源文件夹,src\main\java。请注意,Eclipse不够聪明,无法为您做到这一点,而且文件夹的顺序也不正确。src\main\java文件夹列在src\main/resources之后。这可以稍后在项目属性中手动修复。
-
创建一个新的servlet。请注意,由于顺序错误,Eclipse默认将此文件放在错误的文件夹src\main\resources中。相反,手动选择src\main\java。将向导第二页上的URL映射更改为/*,以简化测试。
-
现在我们的servlet已经准备好了,但是对servlet api的依赖关系还没有绑定。A) 我们可以将servlet api作为依赖项添加到我们的项目中,或者B)我们可以绑定到Apache 7.0的Eclipse服务器配置。
-
对于选项A,将此依赖项添加到pom:
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-api</artifactId>
<version>7.0.${set this}</version>
<scope>provided</scope>
</dependency>
对于选项B:
- 项目属性->Java构建路径->库->添加库->服务器运行时->Apache Tomcat 7.0
- 右键单击并在服务器上运行:
内部浏览器中应该出现一个空白页面,如http://localhost:8080/${artifact}
依赖发布测试:
在pom中添加joda时间。
在之前为doGet方法创建的servlet中添加此行,并导入必要的依赖项:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.getWriter().println("The time is now: " + new DateTime().toString());
}
重新加载测试页面,现在输出应该是:
现在的时间是:2012-03-03T14:14:2.990-05:00
现在,如果你想玩Servlet 3.0和注释,默认情况下这是不启用的,我不知道是什么原因。首先,通过将其添加到pom中,强制Maven使用Java 1.6,否则每次更新pom时,配置都将恢复到Java 1.5。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
打开"项目属性"->"项目面"。将"动态Web模块"下的版本更改为3.0,将java版本更改为1.6
在src\main\java中创建一个类名为AnnotatedServlet的新Servlet,并注意@WebServlet注释是如何自动创建的。
选项2:创建动态Web项目,然后添加Maven Nature
- 选择Tomcat Runtime and Dynamic Module Version 3.0
- 创建源文件夹src\main\java
- 设置默认输出目标\类
- 设置上下文目录src\main\webapp
- 检查生成web.xml
- 创建带有映射/*的servlet以进行快速测试
- 将输出语句添加到doGet方法
response.getWriter().println("Another test");
双击"部署描述符"并将此属性添加到根web应用程序元素
metadata-complete="false"
右键单击项目并选择运行方式->在服务器上运行
- 右键单击项目->配置->转换为Maven项目
- 选择包装作为战争
- 编辑pom并将编译器设置为使用java 1.6,并添加joda时间依赖:
<dependencies>
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<version>2.1</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
</plugins>
</build>
右键单击project Explorer中的web项目,然后选择Maven->更新项目
我遇到了类似的问题,尽管我正确地配置了部署程序集,但它仍然不起作用。然后我发现,在Window->Preferences->My Eclipse->Java Enterprise Project->Web Project的Deployment选项卡下,Dependent项目的管理被关闭了。我将其更改为将依赖项目的jar部署到lib文件夹中,然后一切都像一个符咒。我甚至可以关闭"部署程序集"选项。