1.目标

该篇主要是为了快速利用maven来构建工程,maven作为项目管理的工具已经得到极大程度的应用,很多开源项目都用maven来构建。如何建立

一个maven工程,如何导入别人的maven工程,是这篇文章的核心。

2. 创建maven工程

2.1 下载maven的开发包

maven为apache下opensource项目,其下载地址为: http://maven.apache.org/ ,   下载后将jar包解压到任意目录(建议不要有空格和中文目录)

配置M2_HOME ,以及path路径 :

配置完成以后在命令行执行 mvn -v 获得maven的安装版本,表示安装成功  !

2.2  eclipse下开发maven项目

可以到网上下载m2eclipse插件,但是在eclipse最新版本 luna 中已经集成了maven插件,在eclipse中配置maven ,如图:

其中的settings.xml文件为maven的核心配置文件 。以上也指定了maven的本地仓库 。

新建一个maven工程 (web工程)

选择Maven Project  后Next

选择webapp

工程建立完毕,如下

一开始工程有一个红叉,暂时不管它。先说一个maven的目录结构  最基本的结构如下(一个普通的java工程):

|-src

|-main

|-java

|-test

|-java

|-target

|-pom.xml

其作用:

|-src

|-main

|-java    -->平常工程中的java代码

|-test

|-java    -->放置测试的java代码,以Test开头或者结尾的java代码在maven工程会自动运行

|-target          -->maven工程编译过后生成的文件

|-pom.xml      -->maven工程依赖的jar对应的配置文件(核心文件)

上面的建立的工程目录不满足我们的需求,需要手动建立。将工程切换到java EE视图下

鼠标右击以后建议一个java文件夹,然后添加到Source Folder

同样的道理在src先建立test文件夹,然后在test文件夹下建立java文件夹,得到

2.3  案例 WebDemo

在一篇中利用到了案例WebDemo ,其结构如下:

    其中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.</modelVersion>
<groupId>org.lkl.demo</groupId>
<artifactId>WebDemo</artifactId>
<packaging>war</packaging>
<version>0.0.-SNAPSHOT</version>
<name>WebDemo Maven Webapp</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
<scope>test</scope>
</dependency> <dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1-b09</version>
<scope>provided</scope>
</dependency> <dependency>
<groupId>org.atteo.moonshine</groupId>
<artifactId>h2</artifactId>
<version>0.9</version>
</dependency> </dependencies> <build>
<finalName>WebDemo</finalName> <plugins>
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>7.0..v20100331</version>
<configuration>
<scanIntervalSeconds></scanIntervalSeconds>
<webAppConfig>
<contextPath>/</contextPath>
</webAppConfig>
<webAppSourceDirectory>webapp</webAppSourceDirectory>
<connectors>
<connector implementation="org.eclipse.jetty.server.nio.SelectChannelConnector">
<port></port>
<maxIdleTime></maxIdleTime>
</connector>
</connectors>
</configuration>
</plugin>
</plugins> </build>
</project>

dependencies 下配置工程依赖的jar的信息,可以在http://mvnrepository.com/ 中查到需要的依赖文件

例如 :

下面依次来解释pom.xml中的内容

  <groupId>org.lkl.demo</groupId>
<artifactId>WebDemo</artifactId> -->工程表示
<packaging>war</packaging> -->编译打包的形式
<version>0.0.-SNAPSHOT</version> -->里程碑信息
<name>WebDemo Maven Webapp</name>
<url>http://maven.apache.org</url>

注意一下这里的里程碑信息,一般情况下有如下几种形式的里程碑

      SNAPSHOT:快照 在开发中的版本
ALPHA:内部测试的版本
BETA:公测的版本(给外部人员使用的版本)
RELEASE: 又称RC 释放版本
GA:稳定的版本

依赖信息

 <dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version> -->版本
<scope>test</scope> -->对应的jar包在工程中的依赖范围
</dependency>

其依赖范围有如下几种

   . test范围指的是测试范围有效,在编译和打包时都不会使用这个依赖
. compile范围指的是在编译范围有效,在编译和打包的时候都会将依赖存储进去
. provided范围,在编译和测试范围有效,在打包时不会加入依赖,如servlet-api.jar,一般在服务器中已经存在了, 如果还打包进去的话就会造成冲突
. runtime在运行的时候依赖,在编译的时候不依赖

看下面的servlet的配置:

 <dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1-b09</version>
<scope>provided</scope>
</dependency>

其依赖范围为provided,在打包的时候就不会进行依赖,因为一般的app server中都存在对应的jar,刚才建立的工程中出现红叉就是因为没有添加该依赖信息。

最后一个依赖

<dependency>
<groupId>org.atteo.moonshine</groupId>
<artifactId>h2</artifactId>
<version>0.9</version>
</dependency>

为H2内存数据库的依赖,不需要安装    http://www.h2database.com/html/quickstart.html  ,在test/java文件夹中存在一个H2DBTest.java的文件,就是用来测试该数据库的。其内容如下

package org.lkl.demo;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet; import org.junit.Test; public class H2DBTest { @Test
public void testDemo() throws Exception{
System.out.println("--test h2 db --");
Class.forName("org.h2.Driver") ;
Connection conn = DriverManager.getConnection("jdbc:h2:test", "sa", "") ;
System.out.println(conn);
PreparedStatement pstmt = conn.prepareStatement("drop table if exists person; create table person(id int primary key ,name varchar)") ;
pstmt.execute() ;
for(int i = ;i< ;i++){
pstmt = conn.prepareStatement("insert into person(id,name) values (?,?)") ;
pstmt.setInt(, i);
pstmt.setString(, "zhangsan-"+i);
pstmt.execute() ;
}
pstmt = conn.prepareStatement("select id,name from person") ;
ResultSet rs = pstmt.executeQuery() ;
while(rs.next()){
System.out.println("id="+rs.getInt()+";name="+rs.getString());
}
conn.close(); }
}

前面已经说过test/java文件夹下的以Test开头或结尾的java文件中的测试方法会在maven工程执行的时候自动运行  ,选中pom.xml文件鼠标右击-->Run  As -->Maven test

得到结果

也可以使用 Maven Build 然后输入test来执行(该方法用来手动输入命令) ,其操作和 Maven test 一致

输入test后执行

测试说完以后接下来继续说pom.xml后面的文件 plugins 表示的为maven工程的插件

    <plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>7.0..v20100331</version>
<configuration>
<scanIntervalSeconds></scanIntervalSeconds>
<webAppConfig>
<contextPath>/</contextPath> -- >工程访问路径
</webAppConfig>
<webAppSourceDirectory>webapp</webAppSourceDirectory>
<connectors>
<connector implementation="org.eclipse.jetty.server.nio.SelectChannelConnector">
<port></port> -->端口
<maxIdleTime></maxIdleTime>
</connector>
</connectors>
</configuration>
</plugin>

该插件为jetty服务器插件,不推荐使用tomcat  .运行为 Maven build 然后输入 jetty:run

输入 localhost:8080 得到如下页面:

一个maven工程就这样子运行起来了

附上工程中其他代码

index.html (静态文件哦)

<html>
<body>
<hr style="margin-top: 100px;">
Welcome to <a href="HelloWorld" style="cursor: pointer;color: red">Apache+Tomcat</a>
</body>
</html>

然后是 main/java下的servlet

package org.lkl.demo;

import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List; import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; /**
* Servlet implementation class HelloWorld
*/
public class HelloWorld extends HttpServlet {
private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
} protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try {
System.out.println("---getDbData():"+getDbData());
request.setAttribute("resultSize",getDbData() );
request.getRequestDispatcher("welcome.jsp").forward(request, response);
} catch (Exception e) {
e.printStackTrace();
}
} private int getDbData() throws Exception{
System.out.println("--test h2 db --");
Class.forName("org.h2.Driver") ;
Connection conn = DriverManager.getConnection("jdbc:h2:test", "sa", "") ;
System.out.println(conn);
PreparedStatement pstmt = conn.prepareStatement("drop table if exists person; create table person(id int primary key ,name varchar)") ;
pstmt.execute() ;
List<String> nameList = new ArrayList<String>() ;
for(int i = ;i< ;i++){
pstmt = conn.prepareStatement("insert into person(id,name) values (?,?)") ;
pstmt.setInt(, i);
pstmt.setString(, "zhangsan-"+i);
pstmt.execute() ;
}
pstmt = conn.prepareStatement("select id,name from person") ;
ResultSet rs = pstmt.executeQuery() ; while(rs.next()){
System.out.println("id="+rs.getInt()+";name="+rs.getString());
nameList.add(rs.getString()) ;
}
conn.close();
return nameList.size();
} }

welcome.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!-- 解决el表示是不启作用 -->
<%@ page isELIgnored="false"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>welcome</title>
</head>
<body>
<hr style="margin-top: 100px;">
You obtain <font color="red">${resultSize}</font> datas. </body>
</html>

该篇结束.下篇继续讨论 apache + tomcat

第二篇、Maven快速上手的更多相关文章

  1. RabbitMQ学习总结 第二篇:快速入门HelloWorld

    目录 RabbitMQ学习总结 第一篇:理论篇 RabbitMQ学习总结 第二篇:快速入门HelloWorld RabbitMQ学习总结 第三篇:工作队列Work Queue RabbitMQ学习总结 ...

  2. maven快速上手

    1.maven安装 首先下载apache-maven-3.3.3-bin.zip(版本可以自己根据自己想要的下载). 解压后如下:   接下来配置系统环境变量: 到此,maven安装好了,接下来输入 ...

  3. Eclipse利用Maven快速上手搭建MyBatis

    一.what is maven? Maven项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的项目管理工具软件. Maven 除了以程序构建能力为特色之外,还提供高级项目管理 ...

  4. 第二篇 CSS快速入门

    学CSS 和 JS的路线: 1. 首先,学会怎么找到标签.只有找到标签,才能操作标签——CSS通过选择器去找标签 2. 其次,学会怎么操作标签对象. CSS概述 CSS是Cascading Style ...

  5. SpringCloud核心教程 | 第二篇: 使用Intellij中的maven来快速构建Spring Cloud工程

    spring cloud简介 spring cloud 为开发人员提供了快速构建分布式系统的一些工具,包括配置管理.服务发现.断路器.路由.微代理.事件总线.全局锁.决策竞选.分布式会话等等.它运行环 ...

  6. 【Python五篇慢慢弹】快速上手学python

    快速上手学python 作者:白宁超 2016年10月4日19:59:39 摘要:python语言俨然不算新技术,七八年前甚至更早已有很多人研习,只是没有现在流行罢了.之所以当下如此盛行,我想肯定是多 ...

  7. Gradle快速上手——从Maven到Gradle

    [本文写作于2018年7月5日] 本文适合于有一定Maven应用基础,想快速上手Gradle的读者. 背景 Maven.Gradle都是著名的依赖管理及自动构建工具.提到依赖管理与自动构建,其重要性在 ...

  8. 【opencv入门篇】 10个程序快速上手opencv【下】

    导言:本系列博客目的在于能够在vs快速上手opencv,理论知识涉及较少,大家有兴趣可以查阅其他博客深入了解相关的理论知识,本博客后续也会对图像方向的理论进一步分析,敬请期待:) 上篇传送:http: ...

  9. 【opencv入门篇】 10个程序快速上手opencv【上】

    导言:本系列博客目的在于能够在vs快速上手opencv,理论知识涉及较少,大家有兴趣可以查阅其他博客深入了解相关的理论知识,本博客后续也会对图像方向的理论进一步分析,敬请期待:) PS:官方文档永远是 ...

随机推荐

  1. 在ASP.NET MVC中对手机号码的验证

    在ASP.NET MVC中,可以使用RegularExpression特性来验证手机号码. public class Customer { [Required(ErrorMessage = " ...

  2. Delphi 6 Web Services初步评估之二(转)

    Delphi 6 Web Services初步评估之二(转)   ★ 测试环境:CPU:PIII 550内存: 256MBOS: Windows2000 Server + SP2Web Server: ...

  3. Atmospheric Scattering in Unity5

    本次实践效果仅有Atmospheric Scattering和AA,并无其他post-processing,看到类似depth of field等的效果全部是Atmospheric Scatterin ...

  4. HDOJ 2018 母牛的故事

    Problem Description 有一头母牛,它每年年初生一头小母牛.每头小母牛从第四个年头开始,每年年初也生一头小母牛.请编程实现在第n年的时候,共有多少头母牛? Input 输入数据由多个测 ...

  5. MyEclipse中web服务器的三种配置方式

    初学Javaweb开发的人们都会遇到一个问题,就是服务器环境的搭建配置问题.下面介绍三种服务器的搭建方式. 直接修改server.xml文件 当你写了一个web应用程序(jsp/servlet),想通 ...

  6. 装饰模式,制作一个蛋糕java

    import java.text.DecimalFormat; //抽象组件组件 interface mkcake { public void cake(); } class Cake impleme ...

  7. poj 1704 Georgia and Bob(阶梯博弈)

    Georgia and Bob Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 8656   Accepted: 2751 D ...

  8. Matlab编程-基本命令行语句

    (1) mathlab命令行中“,”与“:”的区别: 结尾不加任何东西也会输出结果 以“,”结尾不显示变量数值,但是再次输入变量名之后可以输出变量值 以“:”结尾显示变量值 (2)    输出格式控制 ...

  9. hdoj 2277 Change the ball【找规律】

    Change the ball Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)T ...

  10. java 解析xml文件案例

    package xmlTest; import javax.xml.parsers.*; import org.w3c.dom.*; public class GetXml { public stat ...