zoukankan      html  css  js  c++  java
  • Maven之——坐标和依赖(上)

    Maven之——坐标和依赖(上)

    1、    Maven坐标概念


                Maven通过构件的坐标来在Maven仓库中定位到详细的构件、Maven的坐标元素包含groupId、artifactId、versiion、packaging、classifier。Maven内置了一个中央仓库地址、须要时Maven会依据坐标到当中下载。详细关于中央仓库的介绍在后面。


    2、    Maven坐标具体解释


             比方以下一组坐标:

                            

        <groupId>org.andy.items</groupId>
        <artifactId>scattered-items</artifactId>
        <packaging>pom</packaging>
        <version>1.0-SNAPSHOT</version>

                groupId:定义当前Maven项目隶属的实际项目。

                artifactId:定义实际项目中的一个Maven项目(模块)

                version:定义Maven项目当前所出的版本号。

                packaging:定义Maven项目的打包方式、打包方式通常与生成构件的文件扩展名相应、比如上面终于生产的文件名称为:scattered-items-1.0-SNAPSHOT.jar。

    而使用war打包方式的Maven项目终于生成的构件会有一个.war文件、其次打包方式会影响到构建的生命周期、当不定义packaging的时候、Maven会使用默认值jar。

                classifier:用来帮助定义构建输出的一些附属构件、不能直接定义项目的classifier、由于附属构件不是项目直接默认生成的、而是由附加的插件帮助生成。

                上述5个元素中、groupId、artifactId、version、是必须的、packaging是可选的、classifier是不能直接定义的。


    3、    依赖配置


                一个依赖能够包括的元素(项目中的pom.xml文件):

        <dependencies>
            <dependency>
                <groupId></groupId>
                <artifactId></artifactId>
                <version></version>
                <scope></scope>
                <type></type>
                <optional></optional>
                <exclusions>
                    <exclusion>
                        <groupId></groupId>
                        <artifactId></artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
        </dependencies>


                跟元素project下的dependencies能够包括一个或者多个dependency元素、以声明一个或者多个项目依赖、每一个依赖能够包括的元素有:

                groupId、artifactId、verion:必须元素、基本坐标。

                type:依赖的类型、相应与项目坐标的packaging、大部分情况下该元素不必配置、其默认值是jar。

                scope:依赖的范围、

                optional:标记依赖是否可选、

                exclusions:用来排除传递性依赖。

                这些都会在后面有具体说明。


    4、    依赖范围


                Maven在编译、測试、执行项目时会使用不同的classpath、依赖范围就是用来控制依赖与这三种classpath(编译classpath、測试classpath、执行classpath)的关系的、

                compile:编译依赖范围。假设没有指定就会默认使用该依赖范围。使用此编译范围的Maven依赖、对于编译、測试、执行三种classpath都有效。

                test:測试依赖范围、仅仅对測试classpath有效。比方Junit、仅仅有在编译和測试的时候才须要。

                provided:已提供依赖范围、对于编译和測试有效、可是在执行时无效、如servlet.api。编译和測试项目的时候须要、可是在执行的时候、servlet容器已经提供、就不须要Maven反复提供。

                runtime:执行时依赖、对于測试和执行classpath有效、可是在编译主代码是无效、如JDBC驱动的实现、项目主代码的编译仅仅须要JDK提供的JDBC接口、仅仅有在执行測试或者执行项目的时候才须要上述接口的详细JDBC驱动。

                system:系统依赖范围。其与provided依赖范围全然一致。但使用时必须通过systemPath元素显示第指定依赖文件的路径、慎重使用。

                import:导入依赖范围、不会对三种classpath产生实际的影响、他是与dependencyManagement结合使用的。

                比如以下一段配置:

            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context</artifactId>
                <version>4.1.2.RELEASE</version>
                <scope>runtime</scope>
            </dependency>

               那么你在主代码文件夹下想使用Springframework的jar包中的不论什么类都是找不到的、编译器提示错误。

    public class FooServiceImpl implements FoodService {
    
        private ApplicationContext context;
        private  String str;
        @Override
             会提示找不到ApplicationContext类。这依赖范围<scope>xxx</scope>在使用的时候一定要注意!




    依赖范围

    编译classpath

    測试classpath

    执行classpath

    演示样例

    compile

    Y

    Y

    Y

    spring-core

    test

    Y

    Y

    junit

    provided

    Y

    Y

    servlet-api

    runtime

    Y

    Y

    JDBC驱动

    system

    Y

    Y

    本地的、Maven仓库之外的类库文件

  • 相关阅读:
    ELK+Kafka集群日志分析系统
    Centos 6.5 部署 redmine 3.3
    Centos 6.5 搭建l2tp 服务端和客户端
    Logstash之multiline 插件
    MYSQL MHA
    windows上给yii2安装插件
    YII2框架的安装
    Apache服务器配置项和虚拟机配置
    浮点数的比较
    微信自定义菜单总结
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/5226613.html
Copyright © 2011-2022 走看看