`
bencmai
  • 浏览: 37386 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Maven 学习笔记(二)--创建一个web项目

阅读更多

 

在 Maven 学习笔记(一) ,我们已经配置好Maven,并且已经能成功创建了简单的项目了,今天来创建一个web项目

 

到目前为止,我们所有的操作都还是在shell命令界面来做,先不涉及任何IDE工具。不过使用Maven来做这一切,一切都还是觉得很顺手,并没有什么麻烦。

(输入创建项目命令,我们不想一开始就输入一大堆参数,看了头晕,简单点mvn archetype:generate,等下再安提示回答)
bencmai@benc-linux:~> mvn archetype:generate   
[INFO] Scanning for projects...
[INFO] Searching repository for plugin with prefix: 'archetype'.
[INFO] ------------------------------------------------------------------------
[INFO] Building Maven Default Project
[INFO]    task-segment: [archetype:generate] (aggregator-style)
[INFO] ------------------------------------------------------------------------
[INFO] Preparing archetype:generate
[INFO] No goals needed for project - skipping
[INFO] Setting property: classpath.resource.loader.class => 'org.codehaus.plexus.velocity.ContextClassLoaderResourceLoader'.
[INFO] Setting property: velocimacro.messages.on => 'false'.
[INFO] Setting property: resource.loader => 'classpath'.
[INFO] Setting property: resource.manager.logwhenfound => 'false'.
[INFO] [archetype:generate]
[INFO] Generating project in Interactive mode
[INFO] No archetype defined. Using maven-archetype-quickstart (org.apache.maven.archetypes:maven-archetype-quickstart:1.0)
Choose archetype:
1: internal -> appfuse-basic-jsf (AppFuse archetype for creating a web application with Hibernate, Spring and JSF)
2: internal -> appfuse-basic-spring (AppFuse archetype for creating a web application with Hibernate, Spring and Spring MVC)
......
17: internal -> maven-archetype-site (A more complex site project)
18: internal -> maven-archetype-webapp (A simple Java web application)
19: internal -> jini-service-archetype (Archetype for Jini service project creation)
20: internal -> softeu-archetype-seam (JSF+Facelets+Seam Archetype)
21: internal -> softeu-archetype-seam-simple (JSF+Facelets+Seam (no persistence) Archetype)
22: internal -> softeu-archetype-jsf (JSF+Facelets Archetype)
23: internal -> jpa-maven-archetype (JPA application)
.......
40: internal -> gmaven-archetype-basic (Groovy basic archetype)
41: internal -> gmaven-archetype-mojo (Groovy mojo archetype)
 (选择我们要创建的项目类型编号,创建web项目,所以选择18)
Choose a number:  (1/2/3/4/5/6/7/8/9/10/11/12/13/14/15/16/17/18/19/20/21/22/23/24/25/26/27/28/29/30/31/32/33/34/35/36/37/38/39/40/41) 15: : 18
[INFO] artifact org.apache.maven.archetypes:maven-archetype-webapp: checking for updates from central
(输入Mavne 团体 坐标)
Define value for groupId: : yotexs
(输入Mavne 项目 坐标)
Define value for artifactId: : yotexs
(输入Mavne 项目版本 坐标)
Define value for version:  1.0-SNAPSHOT: : 
(输入Mavne 项目包结构 坐标)
Define value for package:  yotexs: : com.yotexs
Confirm properties configuration:
groupId: yotexs
artifactId: yotexs
version: 1.0-SNAPSHOT
package: com.yotexs
(确认所有坐标信息--Maven的项目定位坐标由 团体groupId、项目 artifactId、包packageName、版本version唯一地确定一个工程,也是Maven仓库中定位所有依赖的要素)
 Y: : 
[INFO] ----------------------------------------------------------------------------
[INFO] Using following parameters for creating OldArchetype: maven-archetype-webapp:RELEASE
[INFO] ----------------------------------------------------------------------------
[INFO] Parameter: groupId, Value: yotexs
[INFO] Parameter: packageName, Value: com.yotexs
[INFO] Parameter: package, Value: com.yotexs
[INFO] Parameter: artifactId, Value: yotexs
[INFO] Parameter: basedir, Value: /home/bencmai
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] ********************* End of debug info from resources from generated POM ***********************
[INFO] OldArchetype created in dir: /home/bencmai/yotexs
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1 minute 27 seconds
[INFO] Finished at: Mon May 25 11:26:47 HKT 2009
[INFO] Final Memory: 17M/168M
[INFO] ------------------------------------------------------------------------
(查看刚建立的web项目的目录结构)
bencmai@benc-linux:~> tree yotexs
yotexs
|-- pom.xml
`-- src
    `-- main
        |-- resources
        `-- webapp
            |-- WEB-INF
            |   `-- web.xml
            `-- index.jsp

5 directories, 3 files

bencmai@benc-linux:~> ls
bin  Desktop  Documents  example  MyProgram  public_html  SoftWeave  yotexs
(进入我们刚建的yotexs web项目)
bencmai@benc-linux:~> cd yotexs
bencmai@benc-linux:~/yotexs> ls
pom.xml  src
(用vim 编辑器编辑我们的 Maven 的配置文件,此文件作用就类似ant的build.xml,统管整个项目的构建配置)
bencmai@benc-linux:~/yotexs> vim pom.xml

  vim打开的项目默认 pom.xml 配置如下:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>yotexs</groupId>
  <artifactId>yotexs</artifactId>
  <packaging>war</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>yotexs Maven Webapp</name>
  <url>http://maven.apache.org</url>

     <!--指定项目所依赖的库-->
  <dependencies>

    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.6</version>
	<!--指定junit的jar仅仅在测试时依赖,并不发布-->      
	<scope>test</scope>
    </dependency>

  </dependencies>

  <build>
    <finalName>yotexs</finalName>
  </build>
</project>

 接着我们给 我们的Maven项目添加一些依赖的jar库配置,这个刚新建的Web项目的classpath中并没有任何依赖,除了juint,又因为这个项目仅仅是建立了目录结构,我们编译的时候还需要一些如Servlet API、Servlet JSP 等的jar

在<dependency>标签内增加Servlet的编译依赖

<dependencies>
....
<!--Servlet API-->
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>servlet-api</artifactId>
			<version>2.5</version>
                        <!--范围指定为发布时容器提供,不打包-->
			<scope>provided</scope>
		</dependency>
<!--Servlet JSP-->
		<dependency>
			<groupId>javax.servlet.jsp</groupId>
			<artifactId>jsp-api</artifactId>
			<version>2.1</version>
			<type>jar</type>
                        <!--范围指定为发布时容器提供,不打包-->
			<scope>provided</scope>
		</dependency>
....
 </dependencies>

开发过程中,我们肯定会用如jetty活tomcat之类的容器发布并测试,因而我们添加build构建配置,在build里添加容器插件,我们这里使用jetty,让maven自动给我们发布运行

同样在刚才vim 打开的pom.xml <project>标签内部添加,与</dependency>这行同级并在其底下

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

 

依赖配置完成,现在可以进行编码了

(新建java代码包目录-Maven默认会自动把src/main/java/下的目录当成java包和源码,编译时会自动对其进行编译)
bencmai@benc-linux:~> mkdir -p src/main/java/com/yotexs/web
bencmai@benc-linux:~>cd src/main/java/com/yotexs/web
(用vim 新建并打开一个Servlet Java 源文件 )
bencmai@benc-linux:~/yotexs/src/main/java/com/yotexs/web>vim SimpleServlet.java 
package org.sonatype.mavenbook.web;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class SimpleServlet
 */
public class SimpleServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		PrintWriter out = response.getWriter();
		out.println("SimpleServlet 已经执行");
		out.flush();
		out.close();
	}

}

 保存后回到项目根目录进行编译

bencmai@benc-linux:~/yotexs/src/main/java/com/yotexs/web>cd
bencmai@benc-linux:~>cd yotexs
bencmai@benc-linux:~/yotexs>mvn compile

 如果是第一次编译,你会看到Maven会给你自动下载所有的依赖jar库,并添加到classpath中

编译好后,我们可以编辑web.xml,注册我们的Servlet 同样用 vim 编辑

<!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>SimpleServlet</servlet-name>
		<display-name>SimpleServlet</display-name>
		<description></description>
		<servlet-class>com.yotexs.web.SimpleServlet</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>SimpleServlet</servlet-name>
		<url-pattern>/simple</url-pattern>
	</servlet-mapping>
</web-app>

 好,一切准备就绪,可以跑起来了

 

因为我们前面在pom.xml中配置了Maven 的 jetty 插件,Maven知道如何发布和打包我们的web应用并发布到jetty容器中,如果你喜欢,还可以配置其他容器的插件,这点太方便了我们所要做的,就是启动 jetty容器就行

bencmai@benc-linux:~/yotexs>mvn jetty:run
........
[INFO] Context path = /yotexs
[INFO] Tmp directory =  determined at runtime
[INFO] Web defaults = org/mortbay/jetty/webapp/webdefault.xml
[INFO] Web overrides =  none
[INFO] Webapp directory = /home/bencmai/yotexs/src/main/webapp
[INFO] Starting jetty 7.0.0.pre5 ...
2009-05-25 12:39:00.756::INFO:  jetty-7.0.0.pre5
2009-05-25 12:39:00.910::INFO:  No Transaction manager found - if your webapp requires one, please configure one.
2009-05-25 12:39:00.486::INFO:  Started SelectChannelConnector@0.0.0.0:8080
[INFO] Started Jetty Server


 在另外一个shell标签里访问我们的servlet,呵呵,ok

bencmai@benc-linux:~/yotexs>  curl http://localhost:8080/yotexs/simple
SimpleServlet 已经执行

 

 

接这你还可以在 src/main/test/ 下写测试用例等,Maven 也会很聪明的自动给你完成所有测试,自要简单的 mvn test,一切ok。

比ant简单好用多了吧

 

下一节我们开始 更发杂点的多模块项目的构建

分享到:
评论

相关推荐

    maven学习笔记1--myeclipse10中的配置

    在MyEclipse中,你可以创建一个Maven Web应用项目,它会自动生成符合Maven标准的目录结构,包括`src/main/webapp`,这是存放Web应用资源的地方。通过配置POM.xml中的`&lt;packaging&gt;`标签为`war`,Maven会将项目打包成...

    maven学习笔记

    - **项目对象模型 (POM):** Maven 使用 POM 来表示项目的构建信息,每个 Maven 项目都必须包含一个 `pom.xml` 文件作为其核心配置文件。 #### 二、Maven 的基本概念 **1. 骨架 (Skeletion):** Maven 有自己的...

    从零开始学maven,maven学习笔记

    Maven 是一个强大的项目管理和构建工具,主要针对Java项目,由Apache公司开发。它基于项目对象模型(Project Object Model,POM),通过POM文件来管理项目的构建、报告和文档。POM是一个XML文件,包含了项目的配置...

    Maven 构建SpringMVC项目学习笔记

    - **创建项目框架**:使用Maven的maven-archetype-webapp archetype在Eclipse中创建一个新的Maven项目。在“新建”菜单中选择“Maven Project”,然后选择对应的archetype,填写Group Id(组织或公司ID)、Artifact...

    201205_Maven学习笔记2.rar

    【标题】"201205_Maven学习笔记2.rar" 涉及到的是 Maven,这是一个在软件开发中广泛使用的项目管理和综合工具。Maven 提供了一种标准化的方式来构建、文档化以及管理Java项目,它通过一个项目对象模型(Project ...

    maven学习资源整理

    - **Jetty**:Jetty是一个轻量级的Java Web服务器和Servlet容器,可以与Maven紧密集成,用于快速部署和测试Web应用程序。通过Maven插件,你可以轻松地启动和停止Jetty服务器,实现项目的热部署。 - **Eclipse**:...

    Maven学习笔记.docx

    此外,Maven在本地创建一个仓库来存储这些jar包,使得不同项目可以共享这些资源,减少了项目体积。通过定义`groupId`、`artifactId`和`version`这三个元素,Maven能唯一标识每个库,并从本地或远程仓库中检索它们。 ...

    Web Service学习笔记

    在本学习笔记中,我们将深入探讨Web服务的核心概念、技术栈以及实际案例。 一、Web服务的核心概念 1. **SOAP (Simple Object Access Protocol)**:SOAP是一种基于XML的协议,用于交换结构化信息,是Web服务的基础...

    webservice学习笔记 -- XFrie

    【Web Service学习笔记——XFrie框架详解】 Web Service是一种通过网络进行通信的服务,它允许不同的应用程序之间进行数据交换,跨越了操作系统和编程语言的障碍。XFrie是一个轻量级、高性能的Java Web Service框架...

    struts2学习笔记1-HelloWorld项目

    本篇学习笔记将引导我们从零开始,通过一个简单的"HelloWorld"项目,了解Struts2的基础知识。 首先,我们需要在本地环境中搭建Struts2的开发环境。这包括安装JDK、配置Java环境变量、下载Apache Struts2的最新版本...

    Maven指南阅读笔记

    例如,如果某个依赖需要一个需要许可的Sun API,而中央Maven仓库中存在一个免费的替代品,如Geronimo's JTA实现,我们可以使用`exclusions`来替换传递性依赖。 `dependencyManagement`元素是另一个重要的工具,它...

    Spring MVC 学习笔记 一 创建项目

    接下来,我们创建一个新的Maven项目,并在pom.xml文件中添加Spring MVC的依赖。这通常包括`spring-webmvc`、`spring-context`、`spring-core`等核心模块。例如: ```xml &lt;groupId&gt;org.springframework ...

    maven私服nexus-2.11.4-01.rar

    然而,随着项目的发展,依赖库的数量会不断增多,这时,本地Maven仓库可能无法满足需求,这时就需要搭建一个私有的Maven仓库,即Maven私服。Nexus作为一款广泛应用的Maven私服,可以有效地解决这个问题。本文将详细...

    Maven3实战笔记(全)

    1. **Maven安装与配置**:Maven是Apache软件基金会的一个项目,它提供了一种统一的方式来构建和管理Java项目。安装Maven通常涉及下载最新版本的Maven,设置环境变量,以及配置`settings.xml`文件以指定本地仓库位置...

    Junit In Action 学习笔记----下载不扣分,回帖加1分,童叟无欺,欢迎下载

    这一章介绍了一个连接到web服务器的示例应用,并描述了如何应用 Stub方法对远程URL的方法执行单元测试。 第7章:展示了Mock object方法,这是一种让你可以把代码从周围领域对象隔离出来的测试的方法。 ......

    Maven3实战笔记02项目需求和模块分析

    在Maven3的实战学习中,第二部分着重于项目需求分析与模块划分,这是构建大型、复杂项目时的基础工作,能够帮助开发者更好地理解项目架构,合理分配资源,提高开发效率。 #### 项目需求分析 项目需求分析是软件...

Global site tag (gtag.js) - Google Analytics