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
相关推荐
Maven现在是项目管理和依赖管理的必备工具,相信通过本课程的学习,大家可以掌握Maven在实际工程中的实际用法,从而提高自己的开发效率。 本课程整体讲解了以下几点内容: 1.Maven基础核心概念 2.Maven的配置 3.Maven...
Maven快速上手;Memcached快速上手;MogileFS快速上手;MongoDB快速上手;Nginx快速上手;Varnish快速上手; 二、基本业务功能介绍:客户管理、商品管理、购物车、订单管理、库存管理 三、数据库建表语句脚本; 四、最终的...
结构清晰明了, eclipse 导入maven 工程,, 更新包下载包 就可以了,
代码简单明了,用最简单的登陆注册,展示spring-mvc+mybatis+maven几个技术的用法。
maven实战,对刚使用maven的人是不可多得参考资料,可以快速上手maven
maven学习笔记,传智博客的两天maven培训课件,简单易懂,有项目代做,快速上手maven,欢迎大家下载。
《快速上手Maven:2-3年技术人员的实战指南》是一门专为具有2-3年工作经验的技术专业人士设计的实用课程。本课程旨在帮助学员深入理解并掌握Maven这一强大的项目管理和构建工具,从而提高软件开发的效率和质量。 ...
IntelliJ Idea下Maven插件使用技巧 标签:Idea Maven IntelliJ Idea下Maven插件使用技巧,对于开发人员快速上手,并可能有效提高开发效率,特将此整理分享给大家。
Maven项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具。使用maven来开发第一个springmvc的项目让你快速了解maven并上手项目,maven+springMVC
腾讯云对象存储静态工具类,满足日常工作使用,每个方法都有注释,快速上手!记得先引入Maven依赖,在配置文件中配置对象存储所属参数!
maven 管理,数据库文件,代码齐全,快速上手。
全面介绍Maven,很实用。简单快速上手,现在Maven已经全面替代Ant了,不学就落伍了
1、Maven 我为什么要学习这个技术? 在Javaweb开发中,需要使用大量的jar包,我们手动去导入; 如何能够让一个东西自动帮我导入和配置这个jar包。 由此,Maven诞生了! 1.1 Maven项目架构管理工具 我们目前用来就是...
主要介绍了快速了解Maven,具有一定借鉴价值,需要的朋友可以参考下。
简单的maven安装步骤,简单易上手,快速整合到eclipse
Tomcat 中配置一个Web应用 1 conf/server.xml 在<host></host>标记中间增加: “/runwit” docBase=“rwjsp”/> 其中/runwit为自定义的web应用名称,rwjsp为目录:webapps/rwjsp 2 创建目录,编写测试文件test.jsp ...
《计算机毕业设计:基于SpringBoot+Maven+OpenCV实现的...源码结构清晰,注释详尽,有助于学习者快速上手并理解项目的实现原理。文档则对项目的背景、目标、实现过程以及技术难点进行了全面的阐述,为学习者提供了参考.
简单的hello World 案例 快速入门ES 使用maven工具配置 上手快