前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >maven 项目依赖

maven 项目依赖

作者头像
潇洒
发布2023-10-20 10:38:06
2350
发布2023-10-20 10:38:06
举报
文章被收录于专栏:石头岛

什么是依赖

依赖的作用可以将项目以包的方式引用到当前项目中进行使用。 实际上平时引用的jar包都看可以看成是一个个子项目被引入到了项目中。

项目引用

也就是把其他的项目当成jar包放入仓库中,进行依赖的引用,就跟从网上下载jar包到本地一样。 被项目在被引用前必须先 clean install 到仓库中。

引用示例

创建一个maven项目,在 pom.xml 中添加一个项目引用,这里引用一个外部项目 junit,用它来构建测试用例,这里仅作为项目引用的示例。

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<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/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>project01</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
        </dependency>
    </dependencies>
</project>

添加完成后,项目中就出现这个依赖包。

跨项目调用类

日常开发中,不会只针对一个项目开发,会针对不同项目进行开发。

例如: project03 要引用 project01 和 project02 时,project01 和 project02必须先打包发布到了本地仓库中。 project03在pom.xml中添加依赖,这样project01 和 project02 就都被当做依赖打成了jar包入进 project03 的 Maven Library 中。 project03 还会自动得到project01、project02中的所引用的jar包,这叫依赖传递。

project01 中所包含的包:junit,也会被project03续承。

project03

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<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/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.liukai</groupId>
    <artifactId>project03</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <dependency>
            <groupId>com.liukai</groupId>
            <artifactId>project01</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>

</project>

project01

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<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/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.liukai</groupId>
    <artifactId>project01</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
        </dependency>
    </dependencies>
</project>

显示的效果

依赖传递可以是链条式的一个引一个: project01--->project02--->project03

同理,project03 也可以使用 project01 当中的类。

依赖范围

有几种项目类型

  1. compile: 默认
  2. test: 不被传递
  3. system: 本系统
  4. optional:可选依赖

实际开发中,并不是需要的包都需要被依赖,有些包只需要在本项目中进行依赖,并不需要被外部引用到如测试用到的包,这是候就可以选 test 类型。

代码语言:javascript
复制
<dependencies>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>3.8.1</version>
        <scope>test</scope>
    </dependency>
</dependencies>

dependencies

是在project元素下项目管理元素,在这标签下添加的项目座标会自动添加到项目中。 dependency 包含元素:

  • type:依赖类型,对应于项目座标的packageing,一般不写。
  • scope:依赖范围
  • doptional:标记依赖是赖可选
  • exclusions:用来排除传递性依赖

scope 属性:

  1. test: 测试的时候需要这个依赖,编译、打包、发布这个依赖都不会被生效。比如junit。
  2. compile: 编译、打包有效,其他都无效。
  3. runtime: 运行时有效,其他都无效。
  4. provided: 编译和测试过程中有效,最后生成war不会加入依赖,如servlet-api tomcat有带,打包时就没必要了,只在测试时添加就可以了。
  5. system: 特殊,这个使用的时本地的依赖,不使用maven仓库。

默认是compile。假设如果,scope是依test,不会产生依赖。

总结

项目依赖是管理项目非常用的方式,也非常简便,实际开发中非常常用这种方式。但是如果多项目中的引用存在不同的版本,也会产生版本引用冲突,maven 一般是通过就近原则解决这个问题,我们也可以通过排除不需要的项目依赖来解决这个问题。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2015-11-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是依赖
  • 项目引用
    • 引用示例
    • 跨项目调用类
      • project03
        • project01
        • 依赖范围
        • dependencies
        • 总结
        相关产品与服务
        腾讯云服务器利旧
        云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档