Maven学习

简介

maven对于Java相当于cocoaPods对于iOS。

官网:http://maven.apache.org/download.cgi

下载后的Maven: apache-maven-3.3.3-bin.zip

配置maven的环境变量:

图片.png

本地仓库

默认本地仓库在:
系统当前用户目录下.m2

Maven缺省的本地仓库路径为${user.home}/.m2/repository

本地仓库是远程仓库的一个缓冲和子集,当你构建Maven项目的时候,首先会从本地仓库查找资源,如果没有,那么Maven会从远程仓库下载到你本地仓库。这样在你下次使用的时候就不需要从远程下载了。如果你所需要的jar包版本在本地仓库没有,而且也不存在于远程仓库,Maven在构建的时候会报错,这种情况可能是有些jar包的新版本没有在Maven仓库中及时更新。

修改本地创库:

在D盘下新m2\repository文件夹

可以通过修改${user.home}/.m2/settings.xml配置本地仓库路径

修改Maven安装目录下的 conf/文件夹内的setting.xml文件,新增一行:

<localRepository>D:\m2\repository</localRepository>

表示本地仓库的地址为:D:\m2\repository)

将setting.xml复制一份到

D:\m2\repository目录下

修改Eclipse中的maven配置:

更新本地仓库:

最后打开CMD,执行
mvn help:system
会发现Maven从远程库下载的jar包都会放到新修改后的路径

IntelliJ IDEA转换普通java项目为maven项目

项目上右键 Add Framework Support,选择maven

pom.xml

Project Object Model,项目对象模型
通过xml格式保存的pom.xml文件。
作用类似ant的build.xml文件,功能更强大。该文件用于管理:源代码、配置文件、开发者的信息和角色、问题追踪系统、组织信息、项目授权、项目的url、项目的依赖关系等等。
一个完整的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.codehaus.mojo</groupId>  
  <artifactId>my-project</artifactId>  
  <version>1.0</version>  
  <packaging>war</packaging>  
</project>  
  1. groupId : 组织标识,例如:org.codehaus.mojo,在M2_REPO目录下,将是: org/codehaus/mojo目录。
  2. artifactId : 项目名称,例如:my-project,在M2_REPO目录下,将是:org/codehaus/mojo/my-project目录。
  3. version : 版本号,例如:1.0,在M2_REPO目录下,将是:org/codehaus/mojo/my-project/1.0目录。
  4. packaging : 打包的格式,可以为:pom , jar , maven-plugin , ejb , war , ear , rar , par

POM之间的关系
主要用于POM文件的复用。
a)依赖关系:依赖关系列表(dependency list)是POM的重要部分

    <dependencies>  
       <dependency>  
         <groupId>junit</groupId>  
         <artifactId>junit</artifactId>  
         <version>4.0</version>  
         <scope>test</scope>  
       </dependency>  
       …  
     </dependencies>  

b)继承关系:继承其他pom.xml配置的机制。

比如父pom.xml:

    <project>  
      [...]  
      <dependencies>  
        <dependency>  
          <groupId>junit</groupId>  
          <artifactId>junit</artifactId>  
          <version>4.4</version>  
          <scope>test</scope>  
        </dependency>  
      </dependencies>  
      [...]  
    </project>  

在子pom.xml文件继承它的依赖(还可以继承其他的:developers and contributors、plugin lists、reports lists、plugin executions with matching ids、plugin configuration):

    [...]  
    <parent>  
    <groupId>com.devzuz.mvnbook.proficio</groupId>  
      <artifactId>proficio</artifactId>  
      <version>1.0-SNAPSHOT</version>  
    </parent>  
    [...]  

在这种机制下,maven还提供了一个类似java.lang.Object的顶级父pom.xml文件:

可以通过下面命令查看当前pom.xml受到超pom.xml文件的影响:
mvn help:effective-pom

c)聚合关系:用于将多个maven项目聚合为一个大的项目。

    <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.codehaus.mojo</groupId>  
      <artifactId>my-parent</artifactId>  
      <version>2.0</version>  
      <modules>  
        <module>my-project<module>  
      </modules>  
    </project>  

Maven属性

maven的属性,是值的占位符,类似EL,类似ant的属性,比如${X},可用于pom文件任何赋值的位置。有以下分类:

1. env.X:操作系统环境变量,比如${env.PATH}
2. project.x:pom文件中的属性,比如:<project><version>1.0</version></project>,引用方式:${project.version}
3. settings.x:settings.xml文件中的属性,比如:<settings><offline>false</offline></settings>,引用方式:${settings.offline}
4. Java System Properties:java.lang.System.getProperties()中的属性,比如java.home,引用方式:${java.home}
5. 自定义:在pom文件中可以:<properties><installDir>c:/apps/cargo-installs</installDir></properties>,引用方式:${installDir}

Maven构建设置

构建有两种build标签:

<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">  
  …  
  <!– "Project Build" contains more elements than just the BaseBuild set –>  
  <build>…</build>  
  <profiles>  
    <profile>  
      <!– "Profile Build" contains a subset of "Project Build"s elements –>  
      <build>…</build>  
    </profile>  
  </profiles>  
</project> 

build中的主要标签:Resources和Plugins。
Resources:用于排除或包含某些资源文件.

    <resources>  
      <resource>  
        <targetPath>META-INF/plexus</targetPath>  
        <filtering>false</filtering>  
        <directory>${basedir}/src/main/plexus</directory>  
        <includes>  
          <include>configuration.xml</include>  
        </includes>  
        <excludes>  
          <exclude>**/*.properties</exclude>  
        </excludes>  
      </resource>  
    </resources>  

Plugins:设置构建的插件

<build>  
   …  
   <plugins>  
     <plugin>  
       <groupId>org.apache.maven.plugins</groupId>  
       <artifactId>maven-jar-plugin</artifactId>  
       <version>2.0</version>  
       <extensions>false</extensions>  
       <inherited>true</inherited>  
       <configuration>  
         <classifier>test</classifier>  
       </configuration>  
       <dependencies>…</dependencies>  
       <executions>…</executions>  
     </plugin>  

---

maven 项目在pom.xml中添加jar包:

参考:http://jingyan.baidu.com/article/e75057f2dc8e90ebc91a8915.html

Maven是基于项目对象模型,提供程序构建能力、更是提供高级的项目管理工具
在开发中,我们能节约不少的磁盘开销能力,同步更新上传svn(只是一种)上的项目,也不用每次更新jar包,把jar包放在磁盘的某一处,项目中多次使用。


---

**maven 添加jar包**

1) 输入http://mvnrepository.com
![图片.png](http://upload-images.jianshu.io/upload_images/1197462-2ce1a052a583d529.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

2) 搜索jar包,比如:junit

![图片.png](http://upload-images.jianshu.io/upload_images/1197462-155cca670dccdb4f.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

3) 一般选择使用人数最多,点击进去

4)使用人数和最新有一个权衡,选一个

![图片.png](http://upload-images.jianshu.io/upload_images/1197462-815fa75ac35a140e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

5) 复制这个dependency


<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>

6) 粘贴到`pom.xml`中去

**Maven 太慢**
Uploading Maven Repositorty Indices...太慢

我们需要换下源:
参考:
maven:
http://www.cnblogs.com/origalom/p/5987931.html  (这个是aliyun的源)


1) 替换settings.xml的镜像

<mirror>
  <id>alimaven</id>
  <name>aliyun maven</name>
  <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
  <mirrorOf>central</mirrorOf>
</mirror>

2)如果还不行,就clean 下

    mvn clean, mvn install



最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,684评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,143评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,214评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,788评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,796评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,665评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,027评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,679评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,346评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,664评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,766评论 1 331
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,412评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,015评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,974评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,073评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,501评论 2 343

推荐阅读更多精彩内容

  • Maven的定义:Apache Maven 是一套软件工程管理和整合工具。基于工程对象模型(POM)的概念,通过一...
    程守正阅读 383评论 1 2
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,596评论 18 139
  • Maven官方网站 Apache Maven是一个软件项目管理和综合工具。基于项目对象模型(POM)的概念,Mav...
    itcode阅读 370评论 0 2
  • 自动建立目录骨架 Maven创建目录的两种方式:1.archetype:generate 按照提示进行选择。2.a...
    vdes阅读 238评论 0 2
  • 在我27岁的人生中,昨天, 真的是为数不多的,略带尴尬的一天。 刚刚开始一个多月, 结果某人开始生病,接着住院,立...
    暖暖的小兔阅读 293评论 0 0