java学习笔记——众筹项目练习——maven的安装与使用

                                                 Maven

经过前面ssm等知识的学习,从这篇开始打算着手众筹小项目的练习,用于融合之前学过的知识,以此来记录自己的学习过程;

首先来学习使用maven。

1.Maven简介 

1.1 Maven翻译为“专家”,“内行”

java学习笔记——众筹项目练习——maven的安装与使用_第1张图片

1.2 Maven是跨平台的项目管理工具。作为Apache组织提供的一个颇为成功的开源项目,Maven主要服务于基于Java平台的项目构建依赖管理项目信息管理。无论是小型的开源类库项目,还是大型的企业级应用;无论是传统的瀑布式开发,还是流行的敏捷模式,Maven都能大显身手。

项目构建

     <1>什么是项目构建?项目构建指的是程序模块从清理、编译直到部署的整个过程。

     <2>什么是理想的项目构建?高度自动化,跨平台,可重用组件,标准化

依赖管理(这是我们的主要用途

     <1>应用程序运行时会依赖很多其他应用程序。有些依赖是直接而明确的,例如我们在类中import一个第三方JAR包中的类,缺失所需要的JAR包时编译无法通过;而有些依赖是含蓄而不明显的,例如在使用Strust2时,它的核心Filter,编码时无法发现缺少对应的JAR包,到运行时才会报错,所以依赖管理是十分复杂的,特别是使用第三方程序很多的情况下。

     <2>Maven能够提供自动的依赖管理,将所需要的JAR自动导入到工程中,根据既定的规则很好的解决JAR包之间的冲突。

项目信息管理

     <1>Maven能够提供高质量的项目信息,包括依赖关系、测试报告、站点信息等详细内容,并自动生成静态页面,拷贝到服务器上就可以直接使用。

 

2 Maven核心概念

2.1 项目对象模型 Project Object Model

2.2 约定的目录结构

2.3 坐标

2.4 依赖管理

2.5 仓库管理

2.6 生命周期

2.7 插件和目标

2.8 聚合和继承

 

3 Maven安装

1.解压部署Maven核心程序
    ①检查JAVA_HOME环境变量
        C:\Windows\System32>echo %JAVA_HOME%
        C:\Program Files\java\jdk1.7.0_07
    ②解压Maven的核心程序
        将apache-maven-3.2.2-bin.zip解压到一个非中文无空格的目录下。例如:D:\devsoft\apache-maven-3.2.2
    ③配置环境变量
        M2_HOME D:\devsoft\apache-maven-3.2.2
        path    D:\devsoft\apache-maven-3.2.2\bin
    ④查看Maven版本信息验证安装是否正确
        C:\Windows\System32>mvn -v
        Apache Maven 3.2.2 (45f7c06d68e745d05611f7fd14efb6594181933e; 2014-06-17T21:51:42+08:00)
        Maven home: D:\devsoft\apache-maven-3.2.2\bin\..
        Java version: 1.7.0_07, vendor: Oracle Corporation
        Java home: D:\devsoft\jdk1.7.0_07\jre
        Default locale: zh_CN, platform encoding: GBK
        OS name: "windows 7", version: "6.1", arch: "amd64", family: "windows"
2.修改本地仓库
    ①默认本地仓库位置:~\.m2\repository
        ~表示当前用户的家目录,例如:C:\Users\[你当前登录系统的用户名]
    ②指定本地仓库位置的配置信息文件:apache-maven-3.2.2\conf\settings.xml
    ③在根标签settings下添加如下内容:[本地仓库路径,也就是RepMaven.zip的解压目录]

java学习笔记——众筹项目练习——maven的安装与使用_第2张图片
3.第一个Maven工程
    ①目录结构
        Hello
        |---src
        |---|---main
        |---|---|---java
        |---|---|---resources
        |---|---test
        |---|---|---java
        |---|---|---resources
        |---pom.xml

    ②POM文件内容


    4.0.0

    com.atguigu.maven
    Hello
    0.0.1-SNAPSHOT

    Hello
      
    
        
            junit
            junit
            4.0
            test
        

    


    ③编写主程序代码
        在src/main/java/com/atguigu/maven目录下新建文件Hello.java,内容如下
        package com.atguigu.maven;
        public class Hello {
            public String sayHello(String name){
                return "Hello "+name+"!";
            }
        }
    ④编写测试代码
        在/src/test/java/com/atguigu/maven目录下新建测试文件HelloTest.java
        package com.atguigu.maven;    
        import org.junit.Test;
        import static junit.framework.Assert.*;
        public class HelloTest {
            @Test
            public void testHello(){
                Hello hello = new Hello();
                String results = hello.sayHello("litingwei");
                assertEquals("Hello litingwei!",results);    
            }
        }
    ⑤运行几个基本的Maven命令
        mvn compile    编译
        mvn clean    清理
        mvn test    测试
        mvn package    打包
        ※注意:运行Maven命令时一定要进入pom.xml文件所在的目录!

 

4 eclipse中使用maven

1)、添加自己已经安装了的maven地址

java学习笔记——众筹项目练习——maven的安装与使用_第3张图片

java学习笔记——众筹项目练习——maven的安装与使用_第4张图片

java学习笔记——众筹项目练习——maven的安装与使用_第5张图片

 

2)、使用maven自带的配置文件;

java学习笔记——众筹项目练习——maven的安装与使用_第6张图片

 

项目对象模型 Project Object Model;

pom.xml:是maven工程最重要的配置文件。在这个文件中声明了都导入哪些jar包;

 

 

     

   

    4.0.0

 

    说明当前项目是哪个公司开发的;公司网址的反转

    com.atguigu.maven

     

     说明当前是什么模块;项目名;

    Hello

    

     说明当前模块的版本号;

    0.0.1-SNAPSHOT

 

    Hello  工程名字

 

       

            junit

            junit

            4.0

            test

       

   

jar包的坐标;

- Maven坐标包含三个向量

①groupId:定义当前Maven项目所隶属的项目,通常为公司或组织的域名的倒序+项目名。例如:org.apache.commons

②artifactId:定义实际项目中的一个模块

③version:定义当前项目的当前版本

 

组织名+模块名+版本号就能定位到一个jar包;

我们需要告诉maven导入的jar包的这些信息;maven就会自动去下载这个jar包(如果没有)

 

5、eclispe默认创建的maven工程;默认是jre1.5,

修改一下maven的配置,让其默认创建jdk1.7及以上的工程!

1、找到maven 的配置文件(比如D:\maven\apache-maven-3.3.9\conf\settings.xml);

2、在标签    中添加

           
                jdk-1.7
                
                    true
                    1.7
                

                
                    1.7
                    1.7
                    1.7
                

            

标签就可以啦!!!

我们以后导包步骤;

1、去网站maven respository查询jar包(比如webmvc)的坐标

java学习笔记——众筹项目练习——maven的安装与使用_第7张图片

java学习笔记——众筹项目练习——maven的安装与使用_第8张图片

java学习笔记——众筹项目练习——maven的安装与使用_第9张图片

2、写在maven工程的pom.xml文件中

3、看到这个jar包以及他运行期间依赖的所有包全进来了;

 

 

Maven程序的下载地址:https://download.csdn.net/download/qq_25106373/10953623;下载后直接解压到无中文路径就可以使用,为了使用方便还上传了本地的maven库,免得什么都去远程下载;

 

pom:

Project Object Model:项目对象模型

Document Object Model:文档对象模型;

maven工程中有一个文件pom.xml

     (当前工程所有信息的描述文件)

     1、不仅描述当前工程是哪个组织哪个项目的哪个模块的哪个版本;

     2、当前项目要依赖其他什么jar包

     3、等等....

pom.xml在maven工程中的作用

web.xml在web工程中的作用

 

坐标:

每一个jar就是通过坐标进行定位;

com.gome:组织名反写;
在实际开发中;一般写  公司域名反写+项目名称

hello02
在实际开发中一般写模块名称;
以Spring的这些jar为例

本地仓库里面
本地仓库\org\springframework\spring-aop\4.0.0.RELEASE\存了jar包以及源码等....
  org.springframework
  spring-aop
  4.0.0.RELEASE

0.0.1
gav:jar包的坐标

 

仓库:

maven用来保存jar包的;

本地仓库:在自己电脑上的maven仓库;默认在用户目录/.m2/repository;

修改了本地目录;去maven的conf文件夹下的setting.xml

直接看有一个注释了的LocalRepository标签。把它打开;配置自己的仓库

私服:局域网范围的一个仓库;

远程仓库:

     maven的官方仓库在英国的一个中央仓库;

     镜像仓库:中央仓库的本地化;在某个国家本地有一个镜像;

maven自动下jar包的步骤;

     去本地仓库看------>私服------->中央仓库;

配置镜像仓库:

     在setting.xml中找到mirros标签,在他里面加上

 
      alimaven
      aliyun maven
      http://maven.aliyun.com/nexus/content/groups/public/
      central        
    

java学习笔记——众筹项目练习——maven的安装与使用_第10张图片

 

麻烦的问题怎么解决:

1)、联网;

2)、如果报各种maven-plugins;

本地仓库的\org\apache\maven文件夹下把plugins整个删掉,让maven重新下载plugins

3)、一但有报错,看problems问题;如果发现有提示

     maven-->update project;

我们就在工程上右键,选中maven--->update project;

选中

java学习笔记——众筹项目练习——maven的安装与使用_第11张图片

 

生命周期插件: 

mvn运行各种命令都是插件完成的;

比如 mvn clean;mvn compile;

 

每个生命周期的各个环节都是由各种插件完成
    - clean生命周期:清理工程:
①pre-clean 执行一些需要在clean之前完成的工作
②clean 移除所有上一次构建生成的文件
③post-clean 执行一些需要在clean之后立刻完成的工作
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building hello02 0.0.1
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ hello02 ---
[INFO] Deleting F:\0325EE\hello02\target
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 0.359 s
[INFO] Finished at: 2017-07-01T10:25:55+08:00
[INFO] Final Memory: 6M/121M
[INFO] ------------------------------------------------------------------------

          
    - Site生命周期:生成站点信息;
①pre-site 执行一些需要在生成站点文档之前完成的工作
②site 生成项目的站点文档
③post-site 执行一些需要在生成站点文档之后完成的工作,并且为部署做准备
④site-deploy 将生成的站点文档部署到特定的服务器上
          mvn site:帮我们生成站点的文档(站点信息,依赖..)
               
    - Default生命周期:
Default生命周期
Default生命周期是Maven生命周期中最重要的一个,绝大部分工作都发生在这个生命周期中。这里,只解释一些比较重要和常用的阶段:
validate
generate-sources
process-sources
generate-resources
process-resources 复制并处理资源文件,至目标目录,准备打包。
compile 编译项目的源代码。
process-classes
generate-test-sources
process-test-sources
generate-test-resources
process-test-resources 复制并处理资源文件,至目标测试目录。
test-compile 编译测试源代码。
process-test-classes
test 使用合适的单元测试框架运行测试。这些测试代码不会被打包或部署。
prepare-package
package 接受编译好的代码,打包成可发布的格式,如JAR。
pre-integration-test
integration-test
post-integration-test
verify
install将包安装至本地仓库,以让其它项目依赖。
deploy将最终的包复制到远程的仓库,以让其它开发人员与项目共享或部署到服务器上运行。
       
mvn clean:清理编译的项目
mvn compile:编译项目
mvn test:测试项目(运行测试类)
mvn package:负责将我们的项目打包
mvn install:将这个项目安装到仓库中;

我们尝试用eclipse运行maven命令出现这个问题; 

-Dmaven.multiModuleProjectDirectory system property is not set. Check $M2_HOME environment variable and mvn script match.

 解决办法:jre不知道maven的安装目录;设置jre运行参数

java学习笔记——众筹项目练习——maven的安装与使用_第12张图片

 

 依赖的范围(scope):

compile、编译范围

test、测试范围

provided、

java学习笔记——众筹项目练习——maven的安装与使用_第13张图片

maven创建web工程;

web工程创建是选中war:

java学习笔记——众筹项目练习——maven的安装与使用_第14张图片

1)、创建一个普通maven工程 

java学习笔记——众筹项目练习——maven的安装与使用_第15张图片

2)、先掉对号,再打上对号;

java学习笔记——众筹项目练习——maven的安装与使用_第16张图片

3)、自动生成web.xml 

java学习笔记——众筹项目练习——maven的安装与使用_第17张图片

web工程还是在pom.xml中导包; 

maven-web工程一但创建jsp页面,或者写servlet都会报错;

java学习笔记——众筹项目练习——maven的安装与使用_第18张图片

原因:tomcat里面的jar包有解析jsp,servlet的类定义;

解决办法:

第一种)、绑定tomcat运行环境

java学习笔记——众筹项目练习——maven的安装与使用_第19张图片

java学习笔记——众筹项目练习——maven的安装与使用_第20张图片 java学习笔记——众筹项目练习——maven的安装与使用_第21张图片

java学习笔记——众筹项目练习——maven的安装与使用_第22张图片 

添加后可以用浏览器访问到index.jsp

第二种)、导入这些jsp、servlet、el表达式等要用的jar(这里推荐第二种)

这种方法也很简单,就是直接都让jsp、servlet的相关依赖,方法我们前边提到过,就是去Maven Repository网站搜索jsp需要的 jar包,添加到pom.xml文件中就可以了

java学习笔记——众筹项目练习——maven的安装与使用_第23张图片

java学习笔记——众筹项目练习——maven的安装与使用_第24张图片 

java学习笔记——众筹项目练习——maven的安装与使用_第25张图片 

java学习笔记——众筹项目练习——maven的安装与使用_第26张图片 

java学习笔记——众筹项目练习——maven的安装与使用_第27张图片 

问题也轻松的解决了,嘻嘻。。。

provided范围体验;

只有compile范围的jar包,在项目打包的时候才会带上,其他都不会;

非compile范围的包,maven在打包项目的时候,不会带上;runtime除外;

依赖的传递、排除、依赖原则;

1)、依赖传递

02工程依赖01工程;01工程自己所用的jar包,默认02工程也能用;

非compile范围的jar包不会依赖传递下去;

2)、依赖排除


        
            com.atguigu.maven
            maven-01
            0.0.1-beta
            
            
                
                
                    log4j
                    log4j
                
            
        
    

3)、依赖原则?

java学习笔记——众筹项目练习——maven的安装与使用_第28张图片

java学习笔记——众筹项目练习——maven的安装与使用_第29张图片

java学习笔记——众筹项目练习——maven的安装与使用_第30张图片

 

统一管理依赖的版本号;

我们可以先定义一个变量spring.version来统一管理版本号


        4.3.9.RELEASE



        
        
        
            org.springframework
            spring-aop
            ${spring.version}
        
        
        
        
            org.springframework
            spring-context
            ${spring.version}
        
        
        
            org.springframework
            spring-jdbc
            ${spring.version}
        

    

 

继承

1、依赖:

工程的几个方式:

jar:打包成一个普通的jar

war:打包成一个web工程的war包

pom:当前工程不会被打包成什么,这个工程就是保存一些配置;

项目之间可以有父子关系;

子工程里面的配置可以是继承于父工程(父工程必须是pom形式);

父工程里面的东西子工程都是继承来的;

1、创建一个父工程

java学习笔记——众筹项目练习——maven的安装与使用_第31张图片

2、注意点:

1、安装到仓库

1)、父子工程:先安装父,在安装子,否则报错

如果说我们要把子工程安装到maven仓库中,方便别人引用;

就必须先把父工程安装进仓库;

因为我们使用的是gav坐标,maven默认先从本地仓库找;

2)、工程依赖;

安装到仓库;先安装被依赖的这些包,再安装本工程;

 

聚合

1、在父工程里面写;聚合的子工程

 
    child01
    child02
  

2、在子工程里面写;parent;说明当前是继承哪个父工程;


    com.atguigu.maven
    parent01
    0.0.1-SNAPSHOT
  
  child02

3、聚合的好处:我们可以让maven打包或者部署的时候,自动解决依赖的先后顺序,这样我们只需要对父工程进行编译、清除、安装等操作,就不用先操作依赖工程了,maven会自动帮我们查找并添加依赖的工程;

后来开发;分模块开发;

某个模块;

user:

     子模块;

     子模块;

     子模块;

 

order:

     子模块;

     子模块;

     子模块;

 

manager:

     子模块;

     子模块;

     子模块;

----------------------------------------------------------------------------------

maven类似的项目构建工具(依赖管理)

maven,gradle,ant,xxx;

你可能感兴趣的:(java学习笔记,众筹项目练习,maven概念与安装)