maven学习(2):创建一个简单的maven项目

                                    maven学习(2):定制一个maven web项目

一.创建一个简单的web项目

     maven3.0以上版本已经废弃create,启用generate创建项目

 1.执行指令创建项目:mvn archetype:generate -DgroupId=org.zcf   -DartifactId=webtest  -DpackageName=com.zcf.webtest  -DarchetypeArtifactId=maven-archetype-webapp -DarchetypeCatalog=internal 

       groupId

     d 团体,公司,小组,组织,项目,或者其它团体。团体标识的约定是,它以创建这个项目的组织名称的逆向域名(reverse domain name)开头。来自Sonatype 的项目有一个以com.sonatype开头的 groupId ,而Apache Software的项目有以org.apache开头的 groupId 

       ArtifactID在 groupId 下的表示一个单独项目的唯一标识符。

(maven 骨架生成项目速度慢的令人发指,都在Generating project in Batch mode等待,Idea状态显示栏还在不行runing,并没有卡死。查看debug信息发现,是maven获取archetype-catalog.xml导致。(用游览器打开http://repo1.maven.org/maven2/archetype-catalog.xml,需要等待很长时间才能获取到。)

解决方法:加上-DarchetypeCatalog=internal 运行参数,archetype-catalog.xml本地获取。)

      会出现如下界面

     

      生成的目录结构如下:

     

 

         

     注意  packaging 元素包含的值是  war 。这种打包类型配置让 Maven 以 WAR 文件的形式生成一个 web 应用。一个打包类型为  war 的项目,将会在  target/ 目录创建一个WAR 文件,这个文件的默认名称是  content-zh-0.6-SNAPSHOT.war 。对于这个项目,默认的 WAR 文件是  target/webtest-1.0-SNAPSHOT.war 。在这个webtest项目中,我们已经通过在项目的构建配置中加入  finalName 元素来自定义这个生成的

WAR 文件的名称。根据 webtest 的  finalName , package 阶段生成的 WAR 文件为  target/webtest.war 。

二.配置jetty插件并运行

  在你已经编译,测试并且打包了你的 web 应用之后,你会想要将它部署到一个servlet 容器中,然后测试一下由 Maven Archetype 插件创建的  index.jsp 。通常情况下,你需要下载 Jetty 或者 Apache Tomcat,解压分发包,复制你的应用程序 WAR文件至  webapps/ 目录,然后启动你的容器。 现在,实现同样的目的,你不再需要做这些事情。 取而代之的是,你可以使用 Maven Jetty 插件在 Maven 中运行你的 web应用。为此,你需要在项目的  pom.xml 中配置 Maven Jetty 插件。 在你项目的构建配置中添加如下插件元素:

<plugins>
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>maven-jetty-plugin</artifactId>
</plugin>
</plugins>

 在项目的  pom.xml 中 配置好 Maven Jetty 插件之后,你就可以调用 Jetty 插件的Run 目标在 Jetty Servlet 容器中启动你的 web 应用。如下运行 mvn jetty:run :

在浏览器中载入 URL http://localhost:8080/webtest/,会看到helloword界面

三.配置一个简单的servlet

   1. 在项目目录下创建   src/main/java/org/zcf的子目录,在子目录下创建一个TestServlet.java文件,插入以下代码

   

package org.zcf;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class TestServlet extends HttpServlet {
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
	PrintWriter out = response.getWriter();
	out.println( "SimpleServlet Executed" );
	out.flush();
	out.close();
 }
}
   2. 接着修改src/main/webapp/下的web.xml目录,配置servlet

   

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
  <display-name>Archetype Created Web Application</display-name>]
	  <servlet>
	<servlet-name>test</servlet-name>
	<servlet-class>org.zcfTestServlet</servlet-class>
	</servlet>
	<servlet-mapping>
	<servlet-name>test</servlet-name>
	<url-pattern>/test</url-pattern>
	</servlet-mapping>
</web-app>
   3.执行编译:mvn compile,会报以下的错误,因为缺少了servlet api的依赖 
[ERROR] /C:/Users/Administrator/webtest/src/main/java/org/zcf/TestServlet.java:[
5,8] 类SimpleServlet是公共的, 应在名为 SimpleServlet.java 的文件中声明
[ERROR] /C:/Users/Administrator/webtest/src/main/java/org/zcf/TestServlet.java:[
3,1] 程序包javax.servlet不存在
[ERROR] /C:/Users/Administrator/webtest/src/main/java/org/zcf/TestServlet.java:[
4,1] 程序包javax.servlet.http不存在
[ERROR] /C:/Users/Administrator/webtest/src/main/java/org/zcf/TestServlet.java:[
5,36] 找不到符号
  符号: 类 HttpServlet
[ERROR] /C:/Users/Administrator/webtest/src/main/java/org/zcf/TestServlet.java:[
6,19] 找不到符号
  符号:   类 HttpServletRequest
  位置: 类 org.sonatype.mavenbook.web.SimpleServlet
[ERROR] /C:/Users/Administrator/webtest/src/main/java/org/zcf/TestServlet.java:[
7,1] 找不到符号
  符号:   类 HttpServletResponse
  位置: 类 org.sonatype.mavenbook.web.SimpleServlet
[ERROR] /C:/Users/Administrator/webtest/src/main/java/org/zcf/TestServlet.java:[
8,8] 找不到符号
  符号:   类 ServletException
  位置: 类 org.sonatype.mavenbook.web.SimpleServlet
[INFO] 7 errors
    在pom文件中添加servlet的依赖即可,这里还有必要指出的是我们的这个依赖使用了  provided 范围。这个范围告诉 Maven jar 文件已经由容器“提供”了,因此不再需要包含在 war 中。
	<dependency>
		<groupId>javax.servlet</groupId>
		<artifactId>servlet-api</artifactId>
		<version>3.0-alpha-1</version>
                <scope>provided</scope>
	</dependency>
    http://localhost:8080/webtest/test打开地址可以看到servlet生成的结果

 

猜你喜欢

转载自zcf9916.iteye.com/blog/2324460