zoukankan      html  css  js  c++  java
  • maven(POM、坐标、依赖)

    1、POM

    (1)概念:

    项目对象模型(Project Object Model),每一个maven项目都要提供pom.xml

    (2)POM的四个部分:

    a、POM Relactionships项目间关系

    坐标:groupid组、artifactID标识、version版本号(唯一标识项目在仓库中的位置)

      <groupId>pers.zhb</groupId>
      <artifactId>MyMaven</artifactId>
      <version>1.0-SNAPSHOT</version>

    依赖:dependencies当前项目依赖哪些项目(通过依赖导入jar包)

    <dependencies>
        <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>4.11</version>
          <scope>test</scope>
        </dependency>
        <dependency>
          <groupId>javax.servlet</groupId>
          <artifactId>servlet-api</artifactId>
          <version>2.5</version>
          <scope>provided</scope>
        </dependency>
        <dependency>
          <groupId>javax.servlet</groupId>
          <artifactId>jsp-api</artifactId>
          <version>2.0</version>
          <scope>provided</scope>
        </dependency>
        <dependency>
          <groupId>org.apache.struts</groupId>
          <artifactId>struts2-core</artifactId>
          <version>2.3.24</version>
        </dependency>
      </dependencies>

    多模块和继承:modules多模块,parent继承(使用多模块和继承对整个项目进行拆分)

    b、Project Information项目信息

    名称:name

    描述:description

    c、Bulid Settings(项目构建时的相关配置)

    属性信息:properties

      <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.7</maven.compiler.source>
        <maven.compiler.target>1.7</maven.compiler.target>
      </properties>

    打包方式:packaging选择打包方式,jar包、war包、pom

      <packaging>war</packaging>

    构建相关配置:bulid

    <build>
        <finalName>MyMaven</finalName>
        <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
          <plugins>
            <plugin>
              <artifactId>maven-clean-plugin</artifactId>
              <version>3.1.0</version>
            </plugin>
            <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
            <plugin>
              <artifactId>maven-resources-plugin</artifactId>
              <version>3.0.2</version>
            </plugin>
            <plugin>
              <artifactId>maven-compiler-plugin</artifactId>
              <version>3.8.0</version>
            </plugin>
            <plugin>
              <artifactId>maven-surefire-plugin</artifactId>
              <version>2.22.1</version>
            </plugin>
            <plugin>
              <artifactId>maven-war-plugin</artifactId>
              <version>3.2.2</version>
            </plugin>
            <plugin>
              <artifactId>maven-install-plugin</artifactId>
              <version>2.5.2</version>
            </plugin>
            <plugin>
              <artifactId>maven-deploy-plugin</artifactId>
              <version>2.8.2</version>
            </plugin>
    
            <plugin>
              <groupId>org.apache.tomcat.maven</groupId>
              <artifactId>tomcat7-maven-plugin</artifactId>
              <version>2.2</version>
              <configuration>
                <port>8888</port>
              </configuration>
            </plugin>
    
            <plugin>
              <groupId>org.apache.maven.plugins</groupId>
              <artifactId>maven-compiler-plugin</artifactId>
              <configuration>
                <target>1.8</target>
                <source>1.8</source>
                <encoding>UTF-8</encoding>
              </configuration>
            </plugin>
          </plugins>
        </pluginManagement>
      </build>

    报告相关配置:reporting

    d、构建环境相关配置(Bulid Environment)

    profiles:使用(项目移植)

    (3)有效POM、自定义POM和超级POM

    自定义POM:Maven的所有操作都是基于插件的,自定义pom.xml没有定义插件,但是能运行test,所以项目运行时生效的不是自定义POM,而是有效POM

    有效POM:在项目运行时生效的POM,有效POM=自定义POM+超级POM

    超级POM:超级POM(如:编译、测试插件,虽然未定义但是可以使用)在Maven环境中,所有定义的pom.xml继承超级POM

    2、坐标和依赖

    在pom.xml里面可以通过<dependencies>标签配置项目的依赖(导入jar包),通过依赖目标项目的坐标,从仓库中找到项目(也就是说只要知道坐标就能获取到jar包)

    (1)获取坐标的方式

    a、网站搜索

    http://search.maven.org/

    http://mvnrepository.com/

    b、使用Maven插件的索引功能

    (2)依赖

    当我们导入一个jar包,同时会自动导入依赖的jar包

     (3)依赖的属性

    坐标:导入一个jar包依赖,必须要素

          <groupId>javax.servlet</groupId>
          <artifactId>jsp-api</artifactId>
          <version>2.0</version>

    依赖项目类型:type,默认值为jar

    optional:标记依赖是否是可选的,如果A依赖B,B又依赖C,那么A依赖于C就可以设置为可选的

    exclusions:排除传递依赖,解决间接依赖的jar包冲突的问题

    scope:jar包的以来范围,决定jar包在什么情况下生效

     <scope>provided</scope>

    (4)传递性依赖

    a、传递性依赖

     b、依赖调节

     B可以直接依赖于G,亦可以先依赖于C,C再依赖于G,这样就会出现一个问题就是G的版本不一致(图中是一致的),如果导入不同的版本的jar包会出现问题

    调解原则(只对传递依赖有效):

    路径近者优先

    第一声明者优先

  • 相关阅读:
    @property
    UIViewController卸载过程(ios6.0以后)
    UIViewController卸载过程(ios6.0之前)
    UIViewController启动过程
    意淫原理,还是很有意思的
    协议
    多线程理解
    内存溢出与内存泄露
    jquery:实例方法
    计划,模型
  • 原文地址:https://www.cnblogs.com/zhai1997/p/12750808.html
Copyright © 2011-2022 走看看