刚开始由.net转向java,公司的项目中就开始使用maven,感觉他就像nuget一样,但是他又比nuget要强大(毕竟他是项目管理工具)。

maven概述

在这里,就不背书包了,怎么简单直接怎么来。

maven主要服务于基于Java平台的项目构建,依赖管理和项目信息管理。

1.1、项目构建过程

  项目构建过程包括: 清理项目->编译项目->测试项目->生成测试报告->打包项目->部署项目,这六个步骤就是一个项目的完整构建过程。

使用maven就可以完成上述所说的项目构建过程。

1.2、依赖管理

  java依赖指的是jar包之间的相互依赖,比如我们使用一个Struts2的开发框架时,仅有struts2-core-*.jar这个jar包是不行的,这个jar包还依赖其它的jar包。

依赖管理指的就是使用Maven来管理项目中使用到的jar包,Maven管理的方式就是“自动下载项目所需要的jar包,并统一管理jar包之间的依赖关系”。

1.3、使用Maven的好处

  1、Maven中使用约定,目录都有明确的约定,约定优于配置,用户在项目间切换就省去了学习成本,约定我们的java源代码代码必须放在哪个目录下,而编译好的java代码又必须放到哪个目录下等。

  2、Maven的每一个动作都拥有一个生命周期,例如执行 mvn install 就可以自动执行编译,测试,打包等构建过程

    3、只需要定义一个pom.xml,然后把源码放到默认的目录,Maven帮我们处理其他事情(比如能够帮我们自动下载写在pom.xml中的jar)

  4、使用Maven可以进行项目高度自动化构建,依赖管理(这是使用Maven最大的好处),仓库管理。

maven下载与目录描述

下载地址

官方的下载地址:http://maven.apache.org/download.cgi

或者 https://pan.baidu.com/s/1nuAOtXf

目录描述

maven安装

1、首先确保电脑上已经安装了JDK(要jdk 1.6以上的版本),配置好JDK的环境变量,使用命令查看是否已且配置好的:

java -version

2.设置系统环境变量:MAVEN_HOME

3.设置环境变量Path,将%MAVEN_HOME%\bin加入Path的最后(非win10的注意前面需要加英文半角分号)

%MAVEN_HOME%\bin代表的就是"C:\Java\apache-maven-3.1.1\bin"目录

4.验证

这个就代表成功了。

Maven的简单使用

maven有严格的目录约定

如何手动创建呢?

我们在  javaProject 目录下新建一个 maven_1 文件夹,作为我们的maven项目根目录,

参照上述的目录结构,我们在 D:\javaProject\maven_1\src\main\java 写一个HelloWorld.java文件,内容:

public class HelloWorld{
public static void main(String args[]){
System.out.println("Hello World");
}
}

在项目根文件下,新建名为 pom.xml的pom文件:

<?xml version="1.0" encoding="UTF-8"?>
<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">
<!--所有的Maven项目都必须配置这四个配置项-->
<modelVersion>4.0.0</modelVersion>
<!--groupId指的是项目名的项目组,默认就是包名-->
<groupId>lsk.maven.helloworld</groupId>
<!--artifactId指的是项目中的某一个模块,默认命名方式是"项目名-模块名"-->
<artifactId>hello-desc</artifactId>
<!--version指的是版本,这里使用的是Maven的快照版本-->
<version>SNAPSHOT-0.0.1</version>
</project>

    1、pom全称:project object model。

    2、pom.xml包含了项目构建的信息,包括项目的信息、项目的依赖等。

    3、pom.xml文件是可以继承的,大型项目中,子模块的pom.xml一般都会继承于父模块的pom.xml

  pom.xml文件的节点元素说明:

    <project>      pom文件的顶级节点
    <modelVersion>   object model版本,对Maven2和Maven3来说,只能是4.0.0 
    <groupId>      项目创建组织的标识符,一般是域名的倒写
    <artifactId>     定义了项目在所属组织的标识符下的唯一标识,一个组织下可以有多个项目
    <version>       当前项目的版本,SNAPSHOT,表示是快照版本,在开发中

    <packaging>     打包的方式,有jar、war、ear等
    <name>       项目的名称
    <url>         项目的地址

    <properties>   属性配置,比如:<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <dependencies>  构建项目依赖的jar

  其中由groupId、artifactId和version唯一的确定了一个项目坐标

使用Maven编译HelloWorld.java,首先进入到项目根目录,然后使用命令”mvn compile”进行编译,如下图所示:

编译时会下载需要的jar包

编译成功:

项目根目录下出现一个target目录,存放的就是源码对应的.class文件。

如果编译后出现 build success , No sources to compile

这个时候,要仔细检查maven项目的源码路径是不是 “根目录\src\main\java ”下,是否缺少某些层。

执行完"mvn clean"命令后,target文件夹就会被删除了。

修改从Maven中心仓库下载到本地的jar包的默认存储位置

从Maven中心仓库下载到本地的jar包的默认存放在”${user.home}/.m2/repository”中,${user.home}表示当前登录系统的用户目录(如"C:\Users\Eric"),如下图

其中的jar包,都是从maven远程中心仓库下载下来的。

如果要修改repository的默认位置,例如想把它放在d盘的repository下,则需要修改maven的配置文件,

找到apache-maven-3.1.1\conf目录下的settings.xml文件,如下图所示:

我们加入一句:

<localRepository>D:/repository</localRepository>

把jar包下载到本地的好处就是:当编译时,会优先从本地的jar包去找。如果本地存在,就直接拿来用;如果不存在,就从Maven的中心仓库去下载。

仅当对一个项目第一次执行"mvn compile"命令时,Maven会去中央仓库下载需要的jar包,而对这个项目第二次执行这两个命令时,由于所需的jar包已经在本地的仓库中存储,所以就可以直接拿来用了,这样就省去了去中央仓库下载jar包的时间。

Maven学习(一)概念简述和安装教程的更多相关文章

  1. (通用)深度学习环境搭建:tensorflow安装教程及常见错误解决

    区别于其他入门教程的"手把手式",本文更强调"因"而非"果".我之所以加上"通用"字样,是因为在你了解了这个开发环境之后 ...

  2. Maven学习 一 概念介绍

    一 Maven是什么 Maven是一个Apache公司的开源项目,主要有两个作用:(1)是项目构建工具.(2)是用来管理java程序中jar包的依赖. 它包含了一个项目对象模型(Project Obj ...

  3. jdk1.8.0_40 +maven+tomcat7.0+mysql8.0详细安装教程

    (一)  jdk的安装 1.下载jdk推荐下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-213 ...

  4. Maven学习存档(1)——安装

    一.安装 1.1 jdk的下载与安装 下载地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html 版本:maven2 ...

  5. (转)Maven学习总结(四)——Maven核心概念

    孤傲苍狼只为成功找方法,不为失败找借口! Maven学习总结(四)——Maven核心概念 一.Maven坐标 1.1.什么是坐标? 在平面几何中坐标(x,y)可以标识平面中唯一的一点. 1.2.Mav ...

  6. Maven学习总结(4)——Maven核心概念

    Maven学习总结(四)--Maven核心概念 一.Maven坐标 1.1.什么是坐标? 在平面几何中坐标(x,y)可以标识平面中唯一的一点. 1.2.Maven坐标主要组成 groupId:组织标识 ...

  7. maven 学习---Maven教程

    Apache Maven是一个软件项目管理和综合工具.基于项目对象模型(POM)的概念,Maven可以从一个中心资料片管理项目构建,报告和文件. 本教程将介绍如何使用Maven在Java开发,或任何其 ...

  8. Maven学习笔记(1)之安装Maven

    此笔记是学习Maven时自己摸索+各种百度而来,并非全部原创,望与各位一同学习,勿拍~勿拍~ 安装步骤 1.下载Maven的最新版本,地址:http://maven.apache.org/downlo ...

  9. TensorFlow 中文资源全集,官方网站,安装教程,入门教程,实战项目,学习路径。

    Awesome-TensorFlow-Chinese TensorFlow 中文资源全集,学习路径推荐: 官方网站,初步了解. 安装教程,安装之后跑起来. 入门教程,简单的模型学习和运行. 实战项目, ...

随机推荐

  1. FactoryMethod工厂方法模式(创建型模式)

    1.工厂方法模式解决的问题 现在有一个抽象的游戏设施建造系统,负责构建一个现代风格和古典风格的房屋和道路. 前提:抽象变化较慢,实现变化较快(不稳定) 整个抽象的游戏设施建造系统相对变化较慢,本例中只 ...

  2. sql server 2008 R2

    SQL SERVER 2008 R2序列号: 数据中心版:PTTFM-X467G-P7RH2-3Q6CG-4DMYB 开 发者 版:MC46H-JQR3C-2JRHY-XYRKY-QWPVM 企    ...

  3. discuz 文件模板edit

    1.修改title Power by discuz! 位置:template/default/common   --->header_common.htm 2.discuz.htm 文件路径(修 ...

  4. springboot 多模块 -- 将 dao(mybatis) 拆分出去

    前言: 以前我们在建项目的时候, 要么将所有的package建在一个项目里面, 在处理引用的时候, 真的很方便. 不用担心, 有些东西配置不到或者读取不到. 或者, 将package独立出去, 到一个 ...

  5. Linux配置多个Tomcat同时运行

    Linux系统下怎样配置多个Tomcat同时运行呢,首先修改变量为第一个tomcat,然后修改第二个tomcat启动的脚本 1.修改环境变量 # vi /etc/profile ####### 工程1 ...

  6. 非Spring环境下使用Mybatis操作数据库的流程

    准备工作 1,  导入mybatis-3.2.7.jar,mysql-connector-5.1.25-bin.jar两个jar包 2,  在数据库中创建一个db_test数据库,库中有一个表为use ...

  7. [error] 1507#0: *22 FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream, client: 10.0.0.1, server: www.wordpress.com, request: "GET /info.p

    字体比较小,如果你遇到这个问题请仔细的把下面的总结看完. 环境:CentOS6.7.2.6.32-573.el6.x86_64.nginx1.12.2 .php5.5.38 问题:nginx能解析静态 ...

  8. redis学习(七)redis主从复制

    redis主从复制 1.redis主从复制的作用 redis的定位是一个高可用的数据服务器,可是在实际生产环境下,单机的redis服务器是无法满足真正意义上的高可用性的. 第一,单机的redis服务器 ...

  9. 【K8S学习笔记】Part2:获取K8S集群中运行的所有容器镜像

    本文将介绍如何使用kubectl列举K8S集群中运行的Pod内的容器镜像. 注意:本文针对K8S的版本号为v1.9,其他版本可能会有少许不同. 0x00 准备工作 需要有一个K8S集群,并且配置好了k ...

  10. redis使用watch秒杀抢购思路

    1.使用watch,采用乐观锁 2.不使用悲观锁,因为等待时间非常长,响应慢 3.不使用队列,因为并发量会让队列内存瞬间升高 测试代码: import java.util.concurrent.Exe ...