`

maven坐标和依赖

阅读更多


maven 坐标

groupId :定义当前maven项目隶属的实际项目。首先,maven项目和实际项目不一定是一对一的关系。

artifactId : 该元素定义实际项目中的第一个maven项目模块,推荐的做法是使用实际项目名称作为artifactid的前缀,作用在于方便寻找实际构件。

version  : 该元素定义maven项目当前所处的版本,其中SNAPSHOT为快照版本.

packaging : 该元素定义maven项目的打包方式。首先,打包方式通常与所生成构建的文件扩展名对应。可以支持jar和war的打包,莫非为jar方式。


classifier:该元素用来帮助定义构建输出一些附属构建。附属构建与主构建对应。如主构件是nexuc-indexer-2.0.0.ar,该项目可能还会通过使用一些插件生成

如nexus-indexer-2.0.0-javadoc.jar,nexus-indexer-2.0.0-sources.jar这样一些附属构件,其中包含了java的文档和源码。

 

 


maven中的一览范围就是用来控制依赖与这三种cleasspath(编译classpath,测试classpath,运行classpath)的关系,maven有一下几种依赖范围:


compile : 编译依赖范围。如果没有指定,就会默认使用该依赖范围。使用此依赖范围的Maven依赖,对于编译、测试、运行三种classpath都有效、典型的例子是spring-core,在编译、测试和运行的时候都需要使用该依赖。

test : 测试依赖范围。使用此依赖范围的Maven依赖,只对于测试classpath有效,在编译主代码或者运行项目的使用时将无法使用此类依赖。典型的例子是junit,它只是在编译测试代码及运行测试时候才需要。

provided : 已提供依赖范围。使用此依赖范围的maven依赖,对于编译和测试classpath有效,但是运行时无效。典型的例子是sevlet-api,编译和测试项目的时候需要该依赖,但是运行时项目的时候,由于容器已经提供,就不需要Maven重复地引入一遍。

runtime : 运行时依赖范围。使用此依赖范围的Mavne依赖,对于测试和运行classpath有效,但是在编译主代码时无效。典型的例子就是JDBC驱动实现,项目主代码的编译只需要JDK提供的JDBC接口,只有在执行测试或者运行项目的时候才需哟啊实现上述接口的具体JDBC驱动。

system : 系统依赖范围。该依赖与三种classpath的关系,和provided依赖范围完全一致。但是,使用system范围的依赖时必须通过systemPath元素显示地制定依赖文件的路径。

 由于此类依赖不是通过mavne仓库解析的,而且往往与本机系统绑定,可能造成构建的不可移植,因此应谨慎使用。systemPath元素可以引用环境变量 如:

   <dependency>
         <groupId>javax.sql</groupId>
          <artifactId>jdbc-stenxt</artifactId>
           <version>2.0</version>
           <scope>system</scope>
            <systemPath>${java.hoem}/lib/rt.java</systemPath>
   </denpendency>

import :  导入依赖范围。该依赖范围不会对三种classpath产生实际的影响。


maven中的传递性依赖

如果A依赖B B依赖C 我们可以说A对于B是第一直接依赖,B对于C是第二直接依赖,A对于C是传递依赖。其中第一直接依赖和第二直接依赖的范围决定了传递性依赖的范围。


依赖调解

    maven中的依赖调解我们注意:当项目A同时依赖X(1.0)和依赖(2.0)这两个jar包,那么maven会根据这两个依赖的路径进行判断。

    (1).路径最近者优先。

    (2).当依赖路径相同的情况下,那么第一声明者优先。


可选依赖是不会被传递。

 <dependency>
         <groupId>javax.sql</groupId>
          <artifactId>jdbc-stenxt</artifactId>
           <version>2.0</version>
            <optional>true</optional>
   </denpendency>


排除依赖  在申明exclusion的时候只需要groupId和artifactId无需指定版本。
 <dependency>
         <groupId>com.juvenxu.mvnbook</groupId>
          <artifactId>project-b</artifactId>
           <version>1.0.0</version>
         <exclusions>
             <exclusion>
                   <groupId>com.juvenxu.mybook</groupId>
                    <artifactId>project-c</artifactId>
             </exclusion>
         </exclusions>
</denpendency>

 <dependency>
         <groupId>>com.juvenxu.mybook</groupId>
          <artifactId>project-c</artifactId>
          <version>2.0</version> 
</denpendency>


归类依赖 可以使用美元符号和大括号环绕方式引用maven属性。

申明
<properties>
  <springframework.version>2.5.6</springframework.version>
</properties>

使用
 <dependency>
   <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
     <version>${springframework.version}</version>
</dependency>

优化依赖

通过 mvn dependency : list 可以查看当前项目的已解析依赖。

     mvn dependency : tree 解析依赖树 。

     mvn analyze 帮助分析当前项目的依赖。

 

分享到:
评论

相关推荐

    Maven中的依赖

    7. **依赖管理和继承**:在大型项目中,可以通过创建父POM来集中管理公共依赖和插件,子项目通过继承父POM来继承这些配置。 8. **版本管理和生命周期**:Maven的版本管理允许我们轻松地升级或降级依赖版本。生命...

    三. 坐标和依赖

    2. **Maven坐标**:在Maven中,每个依赖由三部分组成,即groupId(表示项目或组织的唯一标识)、artifactId(项目或模块的标识)和version(该组件的版本号)。 3. **依赖的传递性**:如果项目A依赖于B,B又依赖于C...

    maven_package 依赖包(完整)

    在POM中声明所需依赖,Maven会根据设定的坐标(groupId、artifactId、version)从Maven中央仓库或其他指定的远程仓库下载对应的jar包。例如,`&lt;dependency&gt;`标签用于声明项目依赖,`&lt;dependencies&gt;`标签则用于包含...

    maven依赖小例子

    这里的`groupId`、`artifactId`和`version`共同构成了Maven坐标,用于唯一标识一个依赖。Maven会根据这个坐标从中央仓库或其他配置的远程仓库下载对应的JAR文件。 Maven依赖管理遵循“传递性”原则,即如果你的项目...

    Maven的依赖验证项目

    这里的`groupId`、`artifactId`和`version`共同构成了Maven坐标,用于唯一标识一个项目或库。Maven会根据这些信息从Maven中央仓库或其他指定的远程仓库下载对应的jar文件。 Maven的依赖机制遵循“传递性”原则,这...

    Maven本地仓库依赖环境

    这里`groupId`、`artifactId`和`version`共同构成了Maven的坐标,用于唯一标识一个库。 总的来说,理解并掌握Maven的本地仓库和依赖管理对于JavaWeb开发者至关重要,它能够简化项目构建过程,提高开发效率,并确保...

    Maven 依赖详细理解.pdf

    POM文件是Maven项目的核心,它是一个xml文件,用于定义项目的构建配置和管理项目依赖。 首先,我们来看一下Maven项目的POM文件。POM文件定义了项目的基本信息,如项目组ID(groupId)、项目ID(artifactId)、项目版本...

    jodconverter2.2.2.jar Maven依赖包

    在这个例子中,'com\'暗示了groupId可能是'com.artofsolving\',这是一个假设的组织名,实际的groupId应在解压前查看Maven依赖的完整坐标。 标签“jodconverter”、“maven”、“jar”和“java”揭示了几个关键点:...

    maven中的mybatis依赖

    1. **groupId**:这是所有Maven坐标的第一部分,类似于Java包名,用于唯一标识一个项目或组织。这里的`org.mybatis`表示这个依赖属于MyBatis组织。 2. **artifactId**:这是Maven坐标的一部分,用于标识同一个项目...

    maven-dubbo-consumer

    1. **Maven**:Maven是Java项目管理工具,用于构建、依赖管理和项目信息管理。在这个项目中,Maven负责编译源代码、运行测试、打包应用,并管理项目的依赖关系。 2. **Dubbo**:Dubbo的核心功能包括服务注册与发现...

    JxBrowser开发maven仓库jar包

    Maven仓库是存储项目依赖的地方,分为中央仓库和本地仓库。中央仓库是默认的依赖源,包含了大量开源项目的jar包。而本地仓库则是Maven在本机上创建的一个临时存储库,用于缓存从远程仓库下载的依赖。 当"JxBrowser...

    Maven原理和实践-培训课件.ppt

    何为Maven 构建,依赖管理,项目信息聚合 Maven核心概念 坐标,依赖,仓库,生命周期,插件 Maven最佳实践 创建、打包、发布、版本管理 项目实战 Nexus(Todo…) M2eclipse(Todo…)

    grails3.2.8的maven依赖

    在实际开发中,Grails 3.2.8与Maven的结合使得开发者能够充分利用Maven的强大功能,如依赖管理和构建自动化,同时享受Grails带来的便捷和高效。通过熟练掌握这两个工具的集成使用,你可以更有效地构建和管理复杂的...

    构建之源:Maven 坐标(GroupID、ArtifactID、Version)全解析

    它由 Apache 软件基金会提供支持,用于管理项目构建、依赖和文档等过程。Maven 的设计灵感来源于早期的软件构建工具如 Ant,但它引入了一些新的概念,使得项目构建过程更加简洁和易于管理。 ### Maven 的主要特点:...

    普通Maven项目,Java,Maven,依赖

    - POM:每个Maven项目都有一个POM.xml文件,它包含了项目的配置信息,如项目坐标(groupId, artifactId, version)、依赖、构建指令等。 - 依赖管理:Maven通过POM文件中的标签来管理项目依赖,自动下载并管理这些...

    maven 3.5.2 maven 3.5.2 maven 3.5.2

    2. **编辑POM**: 修改POM.xml文件,添加项目依赖和配置信息。 3. **构建项目**: 使用`mvn compile`进行编译,`mvn test`运行测试,`mvn package`打包项目,`mvn install`将项目安装到本地仓库。 4. **部署项目**: ...

    maven 构建好的 IK 分词器,可直接使用

    "Maven 构建好的 IK 分词器,可直接使用" 这个标题告诉我们,这里提供的是一个已经使用 Maven 构建完成的 IK 分词器,专为 Elasticsearch 2.2 版本设计。IK 分词器是针对中文文本进行分词处理的工具,通常用于提高...

    maven下载QRCode.jar包

    假设`QRCode.jar`的Maven坐标为`com.qrcode:qrcode:1.0.0`,在你的项目的`pom.xml`文件中,你可以添加以下依赖: ```xml &lt;groupId&gt;com.qrcode&lt;/groupId&gt; &lt;artifactId&gt;qrcode &lt;version&gt;1.0.0 ``` 添加完...

Global site tag (gtag.js) - Google Analytics