设为首页 收藏本站
查看: 2134|回复: 0

[经验分享] 第二篇、Maven快速上手

[复制链接]

尚未签到

发表于 2017-2-28 08:54:43 | 显示全部楼层 |阅读模式
1.目标
  该篇主要是为了快速利用maven来构建工程,maven作为项目管理的工具已经得到极大程度的应用,很多开源项目都用maven来构建。如何建立
  一个maven工程,如何导入别人的maven工程,是这篇文章的核心。

2. 创建maven工程

      2.1 下载maven的开发包
  maven为apache下opensource项目,其下载地址为: http://maven.apache.org/ ,   下载后将jar包解压到任意目录(建议不要有空格和中文目录)
  配置M2_HOME ,以及path路径 :
DSC0000.png

DSC0001.png

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


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

  其中的settings.xml文件为maven的核心配置文件 。以上也指定了maven的本地仓库 。
  新建一个maven工程 (web工程)
DSC0004.png

  选择Maven Project  后Next
DSC0005.png

  选择webapp
DSC0006.png

  工程建立完毕,如下
DSC0007.png

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

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

DSC00010.png

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


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

  其中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/ 中查到需要的依赖文件
  例如 :
DSC00013.png

  下面依次来解释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
DSC00014.png

  得到结果  
DSC00015.png

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

  输入test后执行
DSC00017.png

  测试说完以后接下来继续说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
DSC00018.png

  输入 localhost:8080 得到如下页面:
DSC00019.png

  一个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

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-348187-1-1.html 上篇帖子: Java系的几种WebServer和ApplicationServer 下篇帖子: 用 Spring 快速搭建 Web 应用(支持 RESTful API)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表