第二篇、Maven快速上手

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.0</modelVersion>
  <groupId>org.lkl.demo</groupId>
  <artifactId>WebDemo</artifactId>
  <packaging>war</packaging>
  <version>0.0.1-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.2.v20100331</version>
                <configuration>
                    <scanIntervalSeconds>10</scanIntervalSeconds>
                    <webAppConfig>
                        <contextPath>/</contextPath>
                    </webAppConfig>
                    <webAppSourceDirectory>webapp</webAppSourceDirectory>
                    <connectors>
                        <connector implementation="org.eclipse.jetty.server.nio.SelectChannelConnector">
                            <port>8080</port>
                            <maxIdleTime>60000</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.1-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>

其依赖范围有如下几种

   1. test范围指的是测试范围有效,在编译和打包时都不会使用这个依赖
   2. compile范围指的是在编译范围有效,在编译和打包的时候都会将依赖存储进去
   3. provided范围,在编译和测试范围有效,在打包时不会加入依赖,如servlet-api.jar,一般在服务器中已经存在了, 如果还打包进去的话就会造成冲突
   4. 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  = 1 ;i<11 ;i++){
           pstmt = conn.prepareStatement("insert into person(id,name) values (?,?)") ;
           pstmt.setInt(1, i);
           pstmt.setString(2, "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(1)+";name="+rs.getString(2));
         }
         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.2.v20100331</version>
                <configuration>
                    <scanIntervalSeconds>10</scanIntervalSeconds>
                    <webAppConfig>
                        <contextPath>/</contextPath>  -- >工程访问路径
                    </webAppConfig>
                    <webAppSourceDirectory>webapp</webAppSourceDirectory>
                    <connectors>
                        <connector implementation="org.eclipse.jetty.server.nio.SelectChannelConnector">
                            <port>8080</port>  -->端口
                            <maxIdleTime>60000</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  = 1 ;i<11 ;i++){
           pstmt = conn.prepareStatement("insert into person(id,name) values (?,?)") ;
           pstmt.setInt(1, i);
           pstmt.setString(2, "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(1)+";name="+rs.getString(2));
             nameList.add(rs.getString(2)) ;
         }
         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

时间: 2024-09-28 21:16:51

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

maven快速上手

1.maven安装 首先下载apache-maven-3.3.3-bin.zip(版本可以自己根据自己想要的下载). 解压后如下:   接下来配置系统环境变量: 到此,maven安装好了,接下来输入 mvn -v查看maven是否安装成功. 2.settings.xml文件与实际项目中pom.xml文件配置的关联讲解  在settings.xml文件中  //这是本地仓库路径,管理本地的jar包 <localRepository>D:\SPOC\repository</localRepo

RabbitMQ系列 第二篇:快速入门HelloWorld

1.相关概念 RabbitMQ是一个消息代理,事实上,它接收生产者产生的消息,然后将消息传递给消费者.在这个过程中,它可以路由,可以缓冲,或者更具你设定的规则来将消息持久化.RabbitMQ和消息传输过程中一般会用一些术语: 生产者(Producing ): 意思无非是指发送消息的那一端,如果一个程序发送消息,那么它就将被称为生产者,这里用大写的P来表示. 队列(queue ): 相当于邮箱的名字,它活动在RabbitMQ服务器里边.虽然消息流会通过RabbitMQ和你的应用程序,但是只会被存储

第二篇 CSS快速入门

学CSS 和 JS的路线: 1. 首先,学会怎么找到标签.只有找到标签,才能操作标签--CSS通过选择器去找标签 2. 其次,学会怎么操作标签对象. CSS概述 CSS是Cascading Style Sheets的简称,中文称为层叠样式表,功能是用来控制网页数据的表现,可以使网页的表现与数据内容分离. 一 css的四种引入方式 1. 行内式 行内式是在标记的style属性中设定CSS样式.这种方式没有体现出CSS的优势,不推荐使用. <!DOCTYPE html> <html lang

Gradle快速上手——从Maven到Gradle

[本文写作于2018年7月5日] 本文适合于有一定Maven应用基础,想快速上手Gradle的读者. 背景 Maven.Gradle都是著名的依赖管理及自动构建工具.提到依赖管理与自动构建,其重要性在当今软件环境下不言而喻,Maven也是红极一时. Maven采用约定大于配置的思想,约定了工程结构,生命周期,采用严谨的XML格式进行构建脚本编写,显著地提升了软件构建的效率.但当软件越来越复杂后,大家突然发现Maven的脚本编制已然成了另外一个麻烦.绝大部分的使用者会掉入Maven的plugin陷

【第二篇】ASP.NET MVC快速入门之数据注解(MVC5+EF6)

目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策略(MVC5+EF6) [第四篇]ASP.NET MVC快速入门之完整示例(MVC5+EF6) [番外篇]ASP.NET MVC快速入门之免费jQuery控件库(MVC5+EF6) 请关注三石的博客:http://cnblogs.com/sanshi 数据库连接字符串 上一篇文章中,我们使用MVC的

asp.net signalR 专题—— 第二篇 对PersistentConnection持久连接的快速讲解

上一篇我们快速的搭建了一个小案例,但是并没有对其中的方法进行介绍,这一篇我来逐一解析下. 一:从override的那些方法说起 不管怎么样,我们先上代码,如下: 1 public class MyConnection1 : PersistentConnection 2 { 3 protected override Task OnConnected(IRequest request, string connectionId) 4 { 5 return Connection.Send(connect

vs转eclipse之工具快速上手篇

eclipse工具下载 首先说明,本篇内容适用于刚开始学java的同学,老手大牛等可以路过. 不得不说vs确实很强大,常用的都在安装包里集成了,几乎可以一键安装,直接使用,操作起来非常方便. eclipse刚开始使用相对vs来说确实很大不适应,本篇重点介绍下如何快速上手eclipse. eclipse工具下载, java jdk配置不在本篇范围内,刚开始学java的同学和有兴趣转java的同学可以自行搜索如何配置jdk. 汉化篇 俗话说工欲善其事必先利其器;从官网下载的eclipse是英文版本的

快速上手Ubuntu之安装常用软件篇——打造一个满足基本娱乐办公的Ubuntu

该博客是紧接着上一篇的:快速上手Ubuntu之安装篇--安装win7,Ubuntu16.04双系统 在上一篇博客中,我们成功安装了Ubuntu,但只是个全新的系统,我们还需要安装一些常用软件来满足娱乐办公的需要.接下来将会介绍几种常用软件的安装,以及Linux锐捷客户端连接校园网. 一.安装搜狗输入法和五笔输入法 相信PC端很多用户都是用搜狗拼音输入法的,下面将先介绍怎样安装搜狗输入法. 安装前的小插曲 在安装前,先进行一些小插曲,首先我们要连上网络,网络图标在右上角的标题栏上,如果是用网线连上

Python编程快速上手-让繁琐工作自动化-第二章习题及其答案

Python编程快速上手-让繁琐工作自动化-第二章习题及其答案 1.布尔数据类型的两个值是什么?如何拼写? 答:True和False,使用大写的T和大写的F,其他字母是小写. 2.3个布尔操作符是什么? 答:and.or和not. 3.写出每个布尔操作符的真值表(也就是操作数的每种可能组合,以及操作的结果) 答:and:True and True  -> True True and False -> FalseFalse and True -> FalseFasle and False