Maven学习

作者: 廖马儿 | 来源:发表于2017-03-07 21:34 被阅读50次

    简介

    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:https://img.haomeiwen.com/i1197462/2ce1a052a583d529.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
    
    2) 搜索jar包,比如:junit
    
    ![图片.png](http:https://img.haomeiwen.com/i1197462/155cca670dccdb4f.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
    
    3) 一般选择使用人数最多,点击进去
    
    4)使用人数和最新有一个权衡,选一个
    
    ![图片.png](http:https://img.haomeiwen.com/i1197462/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
    
    
    
    

    相关文章

      网友评论

        本文标题:Maven学习

        本文链接:https://www.haomeiwen.com/subject/qexcgttx.html