在eclipse中开发maven web项目的困难

时间:2013-02-16 12:53:28

标签: java eclipse maven

我通过命令行程序创建了一个maven web项目。我在Eclipse Indigo中安装了m2eWTPtomcat个插件。我通过m2e插件将项目导入eclipse 我在settings.xml节点

中的maven <servers>中添加了这些内容
<server>
        <id>tomcatserver</id>
        <username>admin</username>
        <password>adminadmin</password>
</server>  

tomcat-users.xml我有

<tomcat-users>
<user name="admin" password="adminadmin" roles="admin-gui,manager-gui" />
</tomcat-users>  

pom.xml我有

<build>
    <finalName>FirstWebApp</finalName>
    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>tomcat-maven-plugin</artifactId>
            <configuration>
                     <server>tomcatserver</server>
                     <path>/FirstWebApp</path>
            </configuration>
        </plugin>
    </plugins>
  </build>  

现在右键点击我的项目-> Run as -> Maven build

现在没用了。即在Run as - &gt;下“服务器上运行”选项未显示。所以我

right click on project -> properties -> project facets -> selected Dynamic web module, java, javascript

Maven自己建造了这个项目。现在Run on Server出现了。当我运行应用程序时,它成功运行,但index.jsp没有出现在我的welcome-file-list web.xml中。

我的项目中出现了一个红十字标记的方块。当我点击部署描述符标题下的Error Pages时,它说:

Resource '/FirstWebApp/WebContent/WEB-INF/web.xml' does not exist.  

实际上它不存在,因为当我创建maven项目时,它存在于

/src/main/webapp/WEB-INF/web.xml  

它仍然存在于那里。我的index.jsp也出现在webapp目录中 问题出在哪里?现在我对maven web项目的目录结构感到困惑 任何人都可以向我解释一下我的web项目的目录结构。这是:

->src
    ->main
        resources
        ->webapp
            index.jsp
            ->WEB-INF
                web.xml
->target
    -> it's sub-directories
->WebContent
    ->META-INF
    ->WEB-INF
        lib

这让我很头疼。请指导我,我正在以正确的方式在eclipse中开发maven web项目吗?

哪里我应该将我的POJO,Servlet和其他类放在这个结构中。

感谢很多

2 个答案:

答案 0 :(得分:2)

Eclipse WTP对文件系统布局使用不同于maven的约定。例如,WTP期望您的jsp页面和配置将在WebContent中,这可以更改,但它需要在许多不同的项目属性设置上进行更改。

解决此问题的最快方法是从eclispe中创建一个使用m2e的maven web项目,这样你就可以得到一个为maven和eclipse正确配置的wtp项目。然后我会将您的代码复制到新项目的适当位置。你将把你放入src / main / webapp的web内容中的任何内容放入src / main / java中。阅读maven目录约定是个好主意。

你想让maven和eclipse发挥得很好的基本概念是,eclipse和maven都会尝试负责你的项目配置,这会导致问题。所以你想使用maven作为maven可以设置的所有项目设置的源,例如maven可以告诉eclipse项目是否是动态web模块,以及要使用的java编译器的级别......等等。用于设置maven可以配置使用maven。对于maven无法配置的设置,例如eclipse源代码格式化程序,请使用eclipse项目属性来设置这些设置。

WTP和maven之间的另一个重要区别是WTP希望您配置一个服务器,并且对于每个项目,它假定项目具有目标运行时,以便可以解决诸如servlets api之类的问题。另一方面,Maven期望你的项目应该编译并构建你将运行它的应用程序服务器,因此它希望你从maven中心事物如servlet api,jsp api jars,...中依赖于api jar。等等。它希望那些标有提供的范围。例如。

<dependency>
        <groupId>javax.servlet.jsp</groupId>
        <artifactId>javax.servlet.jsp-api</artifactId>
        <scope>provided</scope>
        <version>2.2.1</version>
</dependency>

答案 1 :(得分:2)

如果您使用的是最新的Eclipse版本之一(Indigo或Juno),您可能也应该安装m2e-wtp插件。它将在Maven配置和WTP期望项目布局的方式之间架起桥梁。

http://www.eclipse.org/m2e-wtp/

这个问题看起来与您尝试做的类似,它更详细地解释了如何设置项目结构:Maven/Tomcat Projects In Eclipse Indigo/3.7