一、Maven介绍

  • ANT/Maven/gradle是一个项目管理工具,它包含了一项目对象模型(Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Manangement System),和用来运行定义在生命周期阶段中插件目标的逻辑。

  • Maven是面向技术层面,针对Java开发项目管理工具,它提供了构建工具所提供功能的超集,除了构建功能之外,Maven还可以管理项目结构、管理依赖关系、生成报告、生成Web站点、有助于团队成员之间的交流与协作。

二、声明周期

三、安装及其第一个Maven工程

  3.1:Maven的安装

A:解压压缩包到workspace某一目录中。

B:配置环境变量
        
        M2_HOME:D:\WorkSpace_Eclipse\apache-maven-3.2.5(类似Java_Home)

path:    加入D:\WorkSpace_Eclipse\apache-maven-3.2.5\bin

C:cmd窗口:输出mvn -v:如果有提示信息,表示安装成功。

  3.2:目录结构:

bin

conf目录:setting.xml:Maven的配置文件。

A:更改Maven的本地仓库的路径:

本地仓库:Maven用于存放从网络中下载的jar与插件的存放目录。修改 conf目录下的setting.xml
        <localRepository>D:/WorkSpace_Eclipse/apache-maven-repository</localRepository>

  3.3:Maven与IDE(MyEclipse)结合:

A:更改MyElipse的默认Maven。Preferences---->MyEclipse---->Maven4MyEclipse--->Installing

B:更改MyElipse的默认Maven。Preferences---->MyEclipse---->Maven4MyEclipse--->Global Setting File:更改为Maven目录的settting.xml的路径。

C:更改MyElipse的默认Maven。Preferences---->MyEclipse---->Maven4MyEclipse中的jdk路径。

  3.4:可以MyEclipse创建一个简单的Maven工程。

约定大于配置。(目录结构)

Maven 提倡“约定优于配置”(Convention Over Configuration),
    这是 Maven最核心的设计理念之一。

原因之一就是使用约定可以大量减少配置。

a) 源码目录为 src/main/java/            【相当于java工程的src目录】

b) 源码资源目录为 src/main/resources/        :用到的资源文件(各种xml,properites,xsd文件等)都放在src/main/resources下面

c) 测试目录为 src/test/java/

d) 测试资源目录为 src/test/resources/

e) 编译输出目录为 target/classes/【bin/WEB-INF/classes】

f) 打包方式为 jar/war

g) 包输出目录为 target/

h) 超级pom

超级 pom 定义以上的目录结构、核心插件设定版本。Maven 设定核心插件的原因,

是防止由于插件版本的变化而造成构建的不稳定。

遵循约定虽然损失了一定的灵活性,用户不能随意安排目录结构,但是却能减少配置。

更重要的是,遵循约定能够帮用户遵循构建标准。个性往往意味着牺牲通用性,

意味着增加无谓的复杂度。

工程目录(main中的java/resource与test中的java/resource是源文件夹,不是文件夹。)

src
            main
                java:            放java的源文件
                resources        放配置文件。
                webapp
                    WEB-INF
                    web.xml
            test
                java            放测试javar的源文件
                resources        放测试的的配置文件。

pom.xml                工程模型配置文件。

target    
            classes

四、坐标(GAV)

上面的例子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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <groupId>com.shyroke</groupId>
<artifactId>maven01</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging> <name>maven01</name>
<url>http://maven.apache.org</url> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties> <dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
  • GroupID是项目组织唯一的标识符,实际对应JAVA的包的结构,是main目录里java的目录结构
  • ArtifactID就是项目的唯一的标识符,实际对应项目的名称,就是项目根目录的名称。
  • version:版本定义,SNAPSHOT--->Alpha--->Beta--->Release----GA
    
        SNAPSHOT:内部开发版本
    
        Alpha:   内部公测版本
    
        Beta:    对外公开的测试版本
    
        Release: 可以使用的版本
    
        GA:     稳定版本
  • <packaging>jar|war|pom</packaging>                运行maven的package命令时,该工程会打包为一个java
  • groupId, artifactId, packaging, version 叫作 maven 坐标,它能唯一的确定一个项目。有了 maven 坐标,我们就可以用它来指定我们的项目所依赖的其他项目,插件,或者父项目。

五、坐标与依赖

  • Maven工程中的依赖:从本地仓库中寻找。如果本地仓库中寻找不到,再找网络仓库(中央仓库)中寻找。

<dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

  5.1  案例

  • 将一个写好代码的maven01工程打包,在maven02工程中通过坐标引用这个工程的代码。

  • 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/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion> <groupId>com.shyroke</groupId>
    <artifactId>maven01</artifactId>
    <version>2.0.1-SNAPSHOT</version>
    <packaging>jar</packaging> <name>maven01</name>
    <url>http://maven.apache.org</url> <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties> <dependencies>
    <dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>3.8.1</version>
    <scope>test</scope>
    </dependency>
    </dependencies>
    </project>
    •   这个工程使用install命令 ,会在本地仓库中生成这个工程的文件,如果没有使用install命令则另一个工程无法引用这个工程。
    • maven01工程的gav唯一标识了这个工程,也就是说在maven01工程中的pom.xml文件中引入这个工程的gav就可以使用maven01工程的类的方法。

  • 如上图,在maven02工程中成功引用了maven01的类。

(一)Maven基础及第一个Maven工程的更多相关文章

  1. MAVEN学习-第一个Maven项目的构建

    MAVEN安装成功之后就可以进行项目的构建和管理了: 为什么要用maven进行项目的构建和管理? 对于初学者来说一个最直接的也是最容易里的优点在于JAR包的管理,相对于以前开发一个项目的时候我们需要用 ...

  2. (一)maven之创建一个maven项目

    为什么要使用Maven? 1.  maven使用的是本地仓库存储jar,所有项目都会共用仓库中的同一份jar. 2.  Spring core.jar必须同时引用版本兼容的common-logging ...

  3. 使用Maven快速创建一个SpringMVC工程步骤

    第一步:创建maven工程,加入SpringMVC的maven依赖: <dependency> <groupId>org.springframework</groupId ...

  4. Maven基础学习(一)—Maven入门

    一.概述      Maven是一个项目管理工具,它包含了一个项目对象模型(Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管 ...

  5. Maven基础配置—本地Maven配置

    1.下载客户端 通过http://maven.apache.org/download.cgi#下载Maven本地客户端. 我下载的是apache-maven-3.2.5-bin.zip,在D盘解压. ...

  6. maven(一)创建一个maven的web项目

    一.创建项目 1.Eclipse中用Maven创建项目 上图中Next 2.继续Next 3.选maven-archetype-webapp后,next 4.填写相应的信息,Packaged是默认创建 ...

  7. (一)SpringMvc简介以及第一个springmvc工程

    一.SpringMVC是什么? springmvc是Spring的一个模块,提供web层解决方案(就与MVC设计架构) 如上图, DispatcherServlet:前端控制器,由SpringMVC提 ...

  8. maven课程 项目管理利器-maven 2-2第一个maven案例hellomaven

    maven 目录结构 pom.xml src -main -java -package -test -java -package -resources

  9. maven(二)创建一个maven的web项目中解决Cannot change version of project facet Dynamic web module to 2.5

    我们用Eclipse创建Maven结构的web项目的时候选择了Artifact Id为maven-artchetype-webapp,由于这个catalog比较老,用的servlet还是2.3的,而一 ...

随机推荐

  1. 在主机上如何构建openwrt的编译环境?

    答: 请参考官方文档

  2. https://www.cnblogs.com/

    Linux如何查看端口 1.lsof -i:端口号 用于查看某一端口的占用情况,比如查看8000端口使用情况,lsof -i:8000 # lsof -i:8000 COMMAND PID USER ...

  3. 《海会圣贤》高清字幕版(由香港佛陀教育协会发布DVD恭敬转成)

    常念阿彌陀佛 2015-09-22 视频(建议WIFI下收看)时长72分钟 https://v.qq.com/x/page/f0166amk57h.html 香港佛陀教育协会发布DVD   DVD+高 ...

  4. Node.jsp配环境更新中)

    设置用户密码sudo passwd user1sudo passwd root 创建新用户sudo useradd -d /home/share -m sharesu share设置新用户密码sudo ...

  5. CDS视图篇 1

    CDS视图概览 CDS是Core Data Services的简称,是HANA数据库向上层ABAP应用层提供数据的一种高效的方式,CDS模型是基于数据库data definition language ...

  6. C#如何控制panel加载的字窗体中控件的位置随着显示器分辨率大小而改变

    System.Windows.Forms.Screen   screen=Screen.PrimaryScreen;     System.Drawing.Rectangle   rct=screen ...

  7. python2.6.6升级python2.7.14

    Centos 6.8系统镜像默认安装的 python 环境是 2.6.6,线上需求需要升级到 2.7.14 版本,网上找了相关资料,升级 python 版本比较容易,但 yum/pip 等命令的使用也 ...

  8. python 类型注解

    函数定义的弊端 python 是动态语言,变量随时可以被赋值,且能赋值为不同类型 python 不是静态编译型语言,变量类型是在运行器决定的 动态语言很灵活,但是这种特性也是弊端 def add(x, ...

  9. iOS-textfield控制光标开始位置

    //    UIView *paddingView1 = [[UIView alloc] initWithFrame:CGRectMake(0, 64, self.view.frame.size.wi ...

  10. linux下的进程通信之信号量semaphore

    概念: IPC 信号量和内核信号量非常相似,是内核信号量的用户态版本. 优点:每个IPC信号量可以保护一个或者多个信号量值的集合,而不像内核信号量一样只有一个值,这意味着同一个IPC资源可以保护多个独 ...