Eclipse WTP未发布Maven依赖项



我正在尝试使用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文件夹中,然后一切都像一个符咒。我甚至可以关闭"部署程序集"选项。

最新更新