Eclipse + Maven +动态Web项目
概要
在Eclipse中,当我从项目的“部署程序集”中删除“Maven->更新项目配置”“Maven Dependencies”时。
细节
我从一个预配置的Eclipse项目开始:File-> New-> Dynamic Web Project-> JavaServer Face v2.0 Project。 为了移除“魔术”,我将它转换为Maven项目:配置 - >转换为Maven项目。
pom.xml包含以下内容:
<build>
<finalName>jsf-facelets-tutorial</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<configuration>
<webXml>WebContent/WEB-INF/web.xml</webXml>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>javax.el</groupId>
<artifactId>el-api</artifactId>
<version>1.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.myfaces.core</groupId>
<artifactId>myfaces-api</artifactId>
<version>2.0.5</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.apache.myfaces.core</groupId>
<artifactId>myfaces-impl</artifactId>
<version>2.0.5</version>
<scope>runtime</scope>
</dependency>
</dependencies>
然后,为了确保Maven依赖关系在部署前被复制到“WEB-INF / lib /”,我将它们添加到项目的“部署程序集”中:项目属性 - >部署程序集。 有关更多详细信息,请参阅此问题:Eclipse + Maven + JavaServer Faces - > ClassNotFoundException:StartupServletContextListener。
我知道有两个相关的问题。
问题
(1)当我“项目 - > Maven->更新项目配置”,“Maven Dependencies”从我的“部署程序集”中删除。 有没有办法阻止这种情况发生,可能是通过一些Maven插件?
(2)当我在Eclipse中构建.war时,一切都很好,.war在Tomcat中运行良好。 但是当我使用Maven的命令行mvn clean compile war:war
它时, mvn clean compile war:war
,来自“WebContent /”的.html文件不会被添加到.war中。 再次,我需要哪些Maven设置/插件来补救?
仅供参考,它是一个非常基本的应用程序...只是一个登录页面和一个欢迎页面。
如果有任何额外的细节我应该提供(web.xml,faces-config-xml,login.xhtml),让我知道,我会添加它们。
谢谢
- 编辑 -
Eclipse版本:3.6.2
Eclipse m2e版本:1.0.1
Apache Maven版本:2.2.1
(1)解决方案
已更新至Eclipse Java EE 3.7.2(Indigo)。 现在也使用用于Eclipse WTP插件的m2e-wtp Maven Integration
(2)解决方案
从原型创建新的Maven项目,然后Eclipse->导入 - >现有的Maven项目。 使用新的Eclipse版本和m2e-wtp,Eclipse中的Java EE透视图可以很好地与标准的Maven目录结构配合使用
pom.xml现在也更简单了:
<build>
<finalName>jsf-facelets-tutorial</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>javax.el</groupId>
<artifactId>el-api</artifactId>
<version>1.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.myfaces.core</groupId>
<artifactId>myfaces-api</artifactId>
<version>2.0.5</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.apache.myfaces.core</groupId>
<artifactId>myfaces-impl</artifactId>
<version>2.0.5</version>
<scope>runtime</scope>
</dependency>
</dependencies>
我建议迁移到Eclipse 3.7.x(Indigo),它可以更好地支持m2e,并允许您使用Maven Integration for WTP(单独安装),这会让事情变得更容易。 我想你的大部分问题都应该通过更新到Indigo来解决。
安装链接:http://marketplace.eclipse.org/node/96737
另请参阅:Eclipse / Indigo / 3.7中的Maven / Tomcat项目
编辑将Web资源置于WebContent下,然后将其添加为WAR插件中的目录可能是一个解决方案。 干净的方法是将它们放在src/main/resources
或src/main/webapp
,它们应该被自动包含在WAR文件中。 WebContent
不是Maven的标准目录之一。