八.mavne依赖特性

    1.依赖范围:<scope>依赖范围</scope>
            1.test:测试范围,编译和打包都不会引入依赖
            2.compile:编译范围,编译和打包都会加入依赖
            3.provided:编译和测试时的范围,打包时不会加入依赖,如:servlet-api,因为tomcao自带的有,打包时加入会冲突
            4.runtime:运行时范围,编译和打包时不加入依赖,如:数据库驱动
            5.system: Maven直接从本地文件系统解析构件(从本地文件系统找依赖)   
            6.systemPath: 仅用于范围为system。提供相应的路径   
            7.optional: 当项目自身被依赖时,标注依赖是否传递。用于连续依赖时使用
            8.缺省默认为compile

    2.依赖传递:
        1.当某个项目引入了别的项目,别的项目所需要的jar等都会自动引入这个项目,(只会传递compile范围的依赖,test范围的依赖不会传递)
        2.A被B依赖,B被C依赖,A的依赖会传递给C,可以使用依赖排除去掉依赖
    3.依赖选择:
            1.依赖级别相同:当A项目和B项目依赖了两个不同版本的jar,C同时依赖了A和B,那么C接受依赖传递的jar的版本为pom.xml
                           先引入依赖的项目的jar的版本
            2.依赖级别不同:当A项目和B项目依赖了两个不同版本的jar,C同时依赖了A和B,那么C接受依赖传递的jar的版本为pom.xml(最短路径选择)
                           依赖的项目的jar的顶级依赖jar的顺序选择
            3.另一篇博文的借鉴:
                a.最短路径原则:如果A对于依赖路径中有两个相同的jar包,那么选择路径短的那个包,路径最近者优先,上述会选X(2.0)。
                b.第一声明优先原则:如果A对于依赖路径中有两个相同的jar包,路径长度也相同,那么依赖写在前面的优先。例如:A->B->F(1.0),A->C->F(2.0),会选F(1.0)。
                c.可选依赖不会被传递,如A->B,B->C,B->D,A对B直接依赖,B对C和D是可选依赖,那么在A中不会引入C和D。可选依赖通过optional元素配置,true表示可选。如果要在A项目中使用C或者D则需要显式地声明C或者D依赖。

    4.依赖排除:当B项目依赖A项目但不想接受A项目的某个jar包的传递,可以使用依赖排除
            在pom.xml中添加:
            <dependency>
                <groupId>mymaven</groupId>
                <artifactId>A</artifactId>
                <version>0.0.1-SANPSHOP</version>
                <!-- 禁止某个jar(log4j)的依赖传递 -->
                <exclusion>
                    <groupId>log4j</groupId>
                    <artifactId>log4j</artifactId>
                </exclusion>
            </dependency>
### Maven 项目中防止依赖受到攻击的最佳实践 为了保护 Maven 项目的依赖免受潜在的安全威胁,可以采取一系列措施来增强安全性。这不仅涉及配置上的调整,也涉及到开发流程中的安全意识提升。 #### 使用可信仓库 仅从官方或经过验证的第三方仓库下载依赖项是至关重要的。Maven 中央仓库是最主要也是最可靠的源之一[^1]。如果需要使用其他仓库,则应确保其信誉良好并尽可能采用 HTTPS 协议连接以加密传输过程。 #### 启用 PGP 签名校验 启用插件和依赖包的 PGP 签名校验可以帮助确认所使用的构件确实来自预期发布者。当设置 `settings.xml` 或 pom 文件时加入 GPG 密钥服务器地址,并指定信任路径: ```xml <profiles> <profile> <id>pgp-check</id> <activation> <activeByDefault>true</activeByDefault> </activation> <properties> <gpg.check.skip>false</gpg.check.skip> <gpg.keyserver.url>hkp://pool.sks-keyservers.net:80</gpg.keyserver.url> </properties> </profile> </profiles> ``` #### 应用 Dependency Check 工具 Apache Maven 提供了一个名为 OWASP Dependency-Check 的插件,它能自动扫描项目及其所有子模块内的已知漏洞库文件。安装该插件后,在构建过程中定期运行检查命令可及时发现风险较高的外部库版本。 ```bash mvn org.owasp:dependency-check-maven:check ``` #### 锁定依赖版本范围 避免使用动态版本号(如 `[1.0,)`),而应该固定具体版本号或者至少限定最小最大边界。这样做的好处是可以减少因上游更新引入未知变化而导致的风险暴露几率。 #### 监控与响应机制建立 创建持续监控方案用于跟踪新发布的 CVE 报告以及其他可能影响现有依赖关系的信息资源;一旦发现问题立即评估迁移成本效益比,并制定相应的修复计划。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值