`

Maven快速上手

阅读更多

1.目标

          该篇主要是为了快速利用maven来构建工程,maven作为项目管理的工具已经得到极大程度的应用,很多开源项目都用maven来构建。如何建立一个maven工程,如何导入别人的maven工程,是这篇文章的核心。

 

 

 2. 创建maven工程

      

      2.1 下载maven的开发包

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

      配置环境变量M2_HOME ,以及把%M2_HOME%\bin 加入到环境变量PATH : 

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

2.2  eclipse下开发maven项目

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



 



 

为了使在Eclipse中运行的Maven 与 在命令行运行的 Maven行为完全一致, 不建议使用Embedded(内置)的Maven.

 

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

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

 选择Maven Project  后Next 




 选择 maven-archetype-webapp 

 填入 Group Id 和 Artifact Id , 点击 Finish



 

工程建立完毕,如下



 一开始工程有一个红叉,暂时不管它。先说一个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 透视图(perspective)下 



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



 

设置为 Source Folder



 

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的文件,就是用来测试该数据库的。其内容如下

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>

 从互联网下载的开源项目, 如果解压后其目录下有pom.xml 文件, 在 Eclipse 中 可以导入为 Maven Project

Eclipse -> File -> Import... -> Maven -> Existing Maven Projects



 

 

  • 大小: 64 KB
  • 大小: 62.4 KB
  • 大小: 31.3 KB
  • 大小: 46.8 KB
  • 大小: 33.6 KB
  • 大小: 9 KB
  • 大小: 58.2 KB
  • 大小: 32.3 KB
  • 大小: 17 KB
  • 大小: 16.3 KB
  • 大小: 33.4 KB
  • 大小: 63.2 KB
  • 大小: 41.3 KB
  • 大小: 53.6 KB
  • 大小: 35.3 KB
  • 大小: 54.2 KB
  • 大小: 50.1 KB
  • 大小: 39.4 KB
分享到:
评论

相关推荐

    MAVEN快速上手教程

    Maven现在是项目管理和依赖管理的必备工具,相信通过本课程的学习,大家可以掌握Maven在实际工程中的实际用法,从而提高自己的开发效率。 本课程整体讲解了以下几点内容: 1.Maven基础核心概念 2.Maven的配置 3.Maven...

    架构之快速上手一代码和ppt

    Maven快速上手;Memcached快速上手;MogileFS快速上手;MongoDB快速上手;Nginx快速上手;Varnish快速上手; 二、基本业务功能介绍:客户管理、商品管理、购物车、订单管理、库存管理 三、数据库建表语句脚本; 四、最终的...

    maven整合ssm,结构清晰明了,初学者快速上手开发

    本项目标题为“maven整合ssm”,旨在为初学者提供一个清晰易懂的SSM整合示例,帮助快速上手开发。通过Eclipse集成开发环境和Maven构建工具,开发者可以更方便地管理依赖,实现项目的构建和运行。 首先,我们需要...

    maven+spring-mvc+spring+mybatis简单的登陆注册,让你更加快速上手

    本项目"maven+spring-mvc+spring+mybatis简单的登陆注册"就是针对初学者的一个快速入门教程,旨在帮助你理解这四大技术的整合使用。 首先,Maven是一个项目管理工具,它可以帮助开发者管理和构建Java项目。Maven...

    官方下载maven-3.5.4

    3. **README.txt**:提供了关于如何安装、配置和使用 Maven 的基本指南,是新用户快速上手的重要文档。 4. **boot**:这个目录包含了用于启动 Maven 的小型内嵌 Jetty 服务器,主要用于插件的自动下载和更新。 5. ...

    Maven基础快速学习入门

    【标题】"Maven基础快速学习入门" 在软件开发领域,Maven是一个广泛使用的构建工具,主要用于管理和构建...对于初学者而言,通过阅读相关博文,如链接提供的"iteye博客"上的内容,结合实际操作,可以快速上手Maven。

    maven学习资源整理

    "Maven快速入门"文档提供了一个简明易懂的起点,帮助初学者快速上手。它通常会涵盖如何设置Maven环境、创建基本的Maven项目结构(如src/main/java和src/test/java),以及如何运行`mvn compile`、`mvn test`等基本...

    Apache Maven项目构建工具 v3.9.6.zip

    通过阅读这个文件,初学者可以快速上手Maven,掌握基本的构建流程。 总结,Apache Maven 3.9.6作为一款强大的项目构建工具,通过其POM、依赖管理和生命周期等特性,极大地简化了Java开发过程。无论是个人学习还是...

    Maven 实战(中文pdf)

    对于初学者,书中提供的实例和实战经验可以帮助快速上手;对于经验丰富的开发者,也能从中找到优化项目构建流程的新思路。 总的来说,《Maven实战》中文版为Java开发者提供了一条通往高效开发的道路,无论你是刚...

    apache-maven-3.5.2-win64.zip

    6. **README.txt**:通常会提供一些基础的安装和使用指导,帮助新用户快速上手Maven。 在实际开发中,Maven通过POM文件来管理项目依赖。POM是一个XML文件,包含了项目的基本信息、依赖关系、构建配置等。通过Maven...

    尚硅谷Maven课程笔记代码资源

    【尚硅谷Maven课程笔记代码...它不仅提供了理论知识,还有实际操作的案例,可以帮助开发者快速上手并精通Maven,提高项目管理效率。通过学习这些内容,你将能够更好地理解和利用Maven的强大功能,提升你的开发工作流。

    详细的maven教程(Maven 的安装与配置)

    Maven 安装与配置指南 Maven 是一个流行的项目管理和构建工具,广泛应用于 Java 项目开发中。下面是 Maven 的安装和配置...Maven 的安装和配置非常简单,只需要了解基本的概念和使用方法就可以快速上手使用 Maven。

    kotlin从入门到精通快速上手

    Kotlin从入门到精通快速上手教材主要围绕着Kotlin的基础知识,涵盖从语言基础到高级特性的详细介绍。本书不仅包括了Kotlin在服务器端、Android平台、JavaScript以及Kotlin Native上的应用,也着重介绍了1.1版本和1.2...

    5分钟熟悉Maven

    ### Maven快速入门指南 #### 一、Maven简介与安装 Maven是一个广泛使用的Java项目管理工具,它能够帮助开发者简化构建过程、依赖管理和项目信息的标准化管理等。本指南将带您快速熟悉Maven的基本操作,只需5分钟...

    纯净的maven框架

    这个“纯净的maven框架”是专为新手设计的,旨在提供一个基础的、易于上手的Maven环境,以便快速启动新项目。 1. **Maven的配置**:Maven的配置主要在`settings.xml`文件中进行,包括本地仓库路径、远程仓库设置、...

Global site tag (gtag.js) - Google Analytics