2012-03-02 262 views
20

我正在尝试使用Eclipse Indigo和Tomcat服务器设置一个基本的hello世界项目。我用一个简单的servlet创建了一个动态项目。测试了这个servlet并且工作得很好。然后我启用了Maven支持并将logback添加到我的pom中。我在servlet的doGet方法中写入了一条日志语句。当运行servlet时,它会抱怨它找不到任何绑定,因为logback jar没有被复制到Eclipse tomcat实例中。我希望能够找到在这里的某个地方发表的罐子:Eclipse WTP未发布Maven依赖关系

${workspace}\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\

如何获得的Eclipse与WTP/Maven的正常工作?我也尝试安装没有区别的m2e-wtp连接器。

回答

48

检查部署大会(背景上项目菜单),必须有映射Maven依赖 - > WEB-INF/lib目录

+0

谢谢你的提示,这是正确配置,但不工作。最终我发现从头开始创建一个新项目的工作。在这种情况下,我创建了该项目,然后添加了Maven WTP连接器,但未正确配置该项目。 – dcompiled 2012-03-03 21:52:35

+2

我有一点点不同的问题,但是这固定了它。我正在使用Maven构建其中包含SNAPSHOTS的项目。我最初启用了Workspace Resolution,并将其关闭。 Eclipse被配置为仍然使用本地项目,而不是来自我们的nexus回购的快照。我不断收到中国国家农业科学院,发现这表明它仍然试图解决它而不是发布它的问题。 – bh5k 2012-10-03 16:46:55

+0

这帮了我很多忙,在另一种情况下:)(类似) – Alex 2013-03-30 19:42:58

13

从ASP.NET背景来看,我发现使用Eclipse WTP和Maven运行webapp需要花费多少工作,尤其是在您自己学习的情况下。希望这本快速入门指南能帮助别人快速起步。

有两种方法可以使用Maven在Eclipse WTP中使用Hello World项目。您可以创建一个动态Web项目,然后添加Maven自然,或者您可以做相反的事情。

先决条件为Eclipse与更新站点

启动配置

选项1:创建动态Web项目再加入Maven的自然

  • 创建新的Maven项目,选择原型 org.apache.maven.archetypes :maven-archetype-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/ $ {a rtifact}依赖

测试发布

  • 添加乔达时间到POM。

  • 在早期的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:29.890-05:00

现在,如果你想使用Servlet 3.0和注释这是默认情况下不启用,为什么我不知道的原因。 首先强制Maven通过将这个添加到你的pom来使用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的自然

  • 选择Tomcat的运行系统和动态模块3.0版
  • 创建源文件夹的src \主\ java中
  • 设置默认输出目标\类
  • 设置上下文目录src \ main \ webapp
  • 检查生成web.xml
  • 创建映射/ *快速检测
  • 的servlet添加输出语句doGet方法

response.getWriter().println("Another test");

  • 双击“部署描述符”,这属性添加到根web应用程序元素metadata-complete="false"

  • 右键单击项目,然后选择运行方式 - >在服务器上运行

  • 右键项目 - >配置 - >转换为Maven项目
  • 选择包装作为战争
  • 编辑POM,并设置编译器使用的Java 1.6,并添加乔达时依赖:

<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> 
+1

最近版本的eclipse(我的过程:创建新的maven项目,选择web应用程序原型,将Maven依赖关系添加到部署程序集中,如此处接受的答案中所述,这似乎一般工作),但这个问题仍然相关的事实表明它仍然不完美*。但是,Web应用程序系统既不存在也不实际设计,并且考虑到使用IDE,这可能是我们遇到这种问题的原因。而.NET中的所有东西都是为了与VS很好地集成而设计的。 – 2016-09-24 14:31:40

0

我遇到了类似的问题,虽然我已经正确配置了部署程序集,但它仍然无法工作。然后,我发现在“部署”选项卡下的窗口 - >首选项 - >我的Eclipse - > Java Enterprise项目 - > Web项目下,关闭了依赖项目的管理。我改变它将依赖项目的罐子部署到lib文件夹,然后所有东西都像魅力一样工作。我甚至可以关闭部署程序集选项。

1

右键单击Project Explorer中的Web项目,然后选择Maven的 - >更新项目