锁定老帖子 主题:m2e创建webapp工程
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2012-11-30
1:安装m2e的方法网上一大堆,就不说了,现在可以在eclipse的市场中搜索maven,也可以在 installations new software中安装普通eclipse插件安装方式进行安装,地址为:m2e releases repository - http://download.eclipse.org/technology/m2e/releases
2:然后进行maven相关的配置,最好用自己本地安装的maven,不要用eclipse自带的。
3:新建maven工程,在Select an Archetype时,选择maven-archetype-webapp,然后就填入一些相关坐标点下一步就OK了。
4:如果在第三步中出现错误,比如类似: Could not resolve archetype org.apache.maven.archetypes:maven-archetype-webapp:RELEASE from any of the configured repositories. Could not resolve artifact org.apache.maven.archetypes:maven-archetype-webapp:pom:RELEASE Failed to resolve version for org.apache.maven.archetypes:maven-archetype-webapp:pom:RELEASE: Could not find metadata org.apache.maven.archetypes:maven-archetype-webapp/maven-metadata.xml in local (C:\Users\scmroad\.m2\repository) Failed to resolve version for org.apache.maven.archetypes:maven-archetype-webapp:pom:RELEASE: Could not find metadata org.apache.maven.archetypes:maven-archetype-webapp/maven-metadata.xml in local (C:\Users\scmroad\.m2\repository)
等信息,那就检查一下网络,比如代理是否好用等,最新的eclipse juno已经会自动查找本机IE的代理设置,不用自己再手动设置了,而且最新的m2e插件在连接远程仓库时也会直接先走eclipse的newwork中的代理设置,即使自己本地的settings.xml中没有设置proxy。 最好能找一个不用代理环境的外网,会很少出问题,随便提一下,本机的maven如果跑命令行模式,和eclipse无关,这时如果有网络代理,必须要设置settings.xml文件中的proxy了,而且好像其中的username和password不支持@和,等特殊符号。
5:完成工程的建立以后会发现目录结构如下: 举例工程信息如下: mvn archetype:create -DgroupId=com.burlesontech.sw -DartifactId=webapp -DarchetypeArtifactId=maven-archetype-webapp 则: You project will now have the following structure:
sw webapp src main resources webapp WEB-INF web.xml index.jsp pom.xml .project
你会奇怪这结构不符合web目录习惯啊,明显没有WEB-INF/lib目录,其实JAVAEE规范要求的WEB应用目录如下: 按照 Java EE 规范的规定,一个典型的Web 应用程序有四个部分: 1. 公开目录 2. WEB-INF/web.xml 文件,发布描述符(必选) 3. WEB-INF/classes 目录,编译后的Java 类文件(可选) 4. WEB-INF/lib 目录,Java 类库文件(*.jar)(可选)
注意后两项是“可选”的,人家没要求一定要有lib,甚至classes目录,这些在容器或应用启动的时候指定classpath就行了,只是好多web容器默认自动加载了这两个目录为classpath中的一部分了。 所以人家maven不建立lib目录也没什么问题,但还是不习惯,别着急。
先按照正常的maven的目录把现在还缺少的目录建立完整,如下: src/main/java src/main/resources src/test/java src/test/resources
在src/main/java目录中随便建立一个servlet 如下:
package org.coffeesweet.foo.web;
import java.io.IOException; import java.io.PrintWriter;
import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;
public class Hello extends HttpServlet { private static final long serialVersionUID = -3696470690560528247L;
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { PrintWriter out = response.getWriter(); out.print("<html><body>"); out.print("<h1> HELLO WORD!"); out.print("</body></html>"); } }
web.xml中别忘了添加servlet映射(MAVEN默认建立的web.xml是2.3的,这里改成2.5了,注意3.0的需要JAVA7支持,不需要在web.xml理配置servlet映射,直接在servlet类上写注解就行了):
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_5.dtd" >
<web-app> <display-name>Archetype Created Web Application</display-name> <servlet> <servlet-name>Hello</servlet-name> <servlet-class>org.coffeesweet.foo.web.Hello</servlet-class> </servlet> <servlet-mapping> <servlet-name>Hello</servlet-name> <url-pattern>/Hello</url-pattern> </servlet-mapping> </web-app>
pom.xml添加依赖: <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.5</version> </dependency>
默认scope是compile,即:对于编译,测试,运行三种classpath都有效,理论上servlet-api在web/lib中可以没有,因为一般web容器都会自带,只需要在写代码时编译用一下,scope定义为:provided就行了, 这里为了做示例故意这么定义一下,感兴趣的可以改一下范围这个再试试。
这时执行maven clean package后发现在target的WEB-INF下自动新建了lib目录,并且将servlet-2.5.jar添加到该目录下了,打出来的war包里也有WEB-INF/lib目录了。 但在src下的webapp下面的WEB-INF里还是没有lib目录,也不影响了,只要打出来的包里有,web容器就会认了,所以MAVEN还是很智能的,在不需要的时候绝不多建,需要的时候自动建。
这时按照上面的提示将依赖修改成如下: <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.5</version> <scope>provided</scope> </dependency> 即:修改了依赖范围成provided时,再执行mvn clean package后,target和war中的WEB-INF下面的lib又没有了。
从而证明,MAVEN的war插件还是很智能的,你不需要往容器添加额外jar的时候,它连lib目录都懒得生成了,你需要的时候,它会给你自动生成,不知道这个和plug的版本是否有关,留给大家实验吧,反正我得到 的结果是不需要像网上大家讲的那样还要利用eclipse自己的web工程功能来修改工程属性什么的,MAVEN自己就能搞定类的依赖和lib目录的问题了。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2012-11-30
现在越来越多公司用maven啦,ant也不少,啥都不用的也很多
|
|
返回顶楼 | |
浏览 4859 次