`

maven的scope属性

 
阅读更多

在maven多模块项目中,为了保持模块间依赖的统一,常规做法是在parent model中,使用dependencyManagement预定义所有模块需要用到的dependency(依赖)

复制代码
<dependencyManagement>
        <dependencies>
            <!-- Feign是一种声明式、模板化的HTTP客户端:以HTTP接口的形式暴露自身服务 -->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-feign</artifactId>
                <version>${spring-cloud-starter-feign.version}</version>
            </dependency>
            <!-- 支持面向方面的编程即AOP,包括spring-aop和AspectJ -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-aop</artifactId>
                <version>${spring.boot.version}</version>
            </dependency>
            <dependency>
                <groupId>org.aspectj</groupId>
                <artifactId>aspectjrt</artifactId>
                <version>${aspectjrt.version}</version>
            </dependency>
        </dependencies>
    </dependencyManagement>
复制代码

然后,子model根据实际需要引入parent中预定义的依赖

复制代码
<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-aop</artifactId>
        </dependency>
    </dependencies>
复制代码

好处:

1、依赖统一管理(parent中定义,需要变动dependency版本,只要修改一处即可);

2、代码简洁(子model只需要指定groupId、artifactId即可)

3、dependencyManagement只会影响现有依赖的配置,但不会引入依赖,即子model不会继承parent中dependencyManagement所有预定义的depandency,只引入需要的依赖即可,简单说就是“按需引入依赖”或者“按需继承”;因此,在parent中严禁直接使用depandencys预定义依赖,坏处是子model会自动继承depandencys中所有预定义依赖;

 

但是,问题也出现了:

单继承:maven的继承跟java一样,单继承,也就是说子model中只能出现一个parent标签;

parent模块中,dependencyManagement中预定义太多的依赖,造成pom文件过长,而且很乱;

如何让这些依赖可以分类并清晰的管理?

 

问题解决:import scope依赖

如何使用:

1、maven2.9以上版本

2、将dependency分类,每一类建立单独的pom文件

3、在需要使用到这些依赖的子model中,使用dependencyManagement管理依赖,并import scope依赖

3、注意:scope=import只能用在dependencyManagement里面,且仅用于type=pom的dependency

示例:

 

复制代码
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <!-- 重要:版本号要和父模块中预定义的spring boot版本号保持一致 -->
                <version>${spring.boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
复制代码

 maven编译后,下载了pom文件,在maven的本地仓库下查看pom文件如下:

好处分析:

1、单一职责原则,根据依赖的分类,细化每一个单一职责的pom文件

2、解决单继承问题,通过import pom文件达到依赖的目的(典型的非继承模式),从而不用从父类中引用依赖

3、父模块的pom就会非常干净,容易维护

分享到:
评论

相关推荐

    Maven 实战(中文pdf)

    此外,书中的内容还会涵盖Maven的依赖管理和解决冲突的方法,如使用 exclusion 标签排除不想要的依赖,以及使用scope属性控制依赖的范围。读者还将了解到Maven仓库的概念,包括本地仓库、远程仓库和中央仓库,以及...

    Maven完全适用手册

    settings.xml用于配置用户和全局的Maven属性,如仓库位置;pom.xml则是项目的聚合和构建描述文件。 **3. 支持更多Plugin语言** Maven2扩展了Plugin语言支持,包括Java、BeanShell和Ant,这增强了插件的灵活性和可...

    Maven引入本地Jar包并打包进War包中的方法

    scope属性指定了Jar包的来源于本地文件,而systemPath属性则指定了本地文件的所在路径。例如,下面是对cpdetector Jar包的配置: ``` &lt;groupId&gt;cpdetector &lt;artifactId&gt;cpdetector &lt;version&gt;1.0.10 &lt;scope&gt;...

    Maven Web基础搭建示例

    `pom.xml`是Maven项目的灵魂,它定义了项目属性、依赖、插件等。对于Web项目,你需要配置`packaging`为`war`,指定Servlet API的版本,并添加其他必要的依赖,例如Spring、Hibernate等。例如: ```xml ... ...

    maven 实战 所有源代码

    &lt;scope&gt;test&lt;/scope&gt; ``` ### 三、Maven生命周期与构建阶段 Maven的生命周期包括`clean`、`default`和`site`三个阶段。其中,`default`生命周期是最常用的,包含了编译、测试、打包、验证等环节。例如,执行`...

    maven测试HelloWorld

    在创建"HelloWorld"项目时,我们需要在`pom.xml`中定义项目的属性,如groupId、artifactId和version,这些属性定义了项目的唯一标识。 ```xml &lt;project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi=...

    Maven3.0权威指南

    - **依赖范围(Dependency Scope)**:Maven中的依赖具有不同的范围,例如compile、test、runtime等。 - **可选依赖(Optional Dependencies)**:某些依赖可以被标记为可选,只有在特定条件下才会被传递下去。 - **...

    maven 实用指南 中文

    2. **依赖范围(Dependency Scope)**:不同类型的依赖有不同的作用范围,如compile(编译时依赖)、runtime(运行时依赖)、test(仅用于测试)等。 3. **依赖冲突解决(Dependency Resolution)**:Maven遵循“最...

    基于MyEclipse搭建maven+springmvc整合图文教程(含源码0

    5. 明确理解Maven依赖的scope属性。 6. 解决Maven编译时的JDK版本问题。 7. 配置Spring MVC的web.xml和dispatcher-servlet.xml文件。 8. 创建基本的Controller和视图展示。 通过这个教程,初学者能够学会如何在...

    maven 安装包用于项目管理

    - 依赖范围(Scope):如编译(compile)、测试(test)、运行时(runtime)、提供者(provided)、系统(system)等,不同范围的依赖在不同阶段发挥作用。 - 面向Profile的构建:通过定义不同环境的配置...

    maven2快速入门教程

    3. **依赖范围**:scope属性定义依赖在哪个阶段有效,如compile、test、runtime等。 ### 七、Maven的Repository 1. **本地仓库**:默认在用户主目录的`.m2\repository`下。 2. **中央仓库**:默认使用Maven的中央...

    maven 安装包

    同时,Maven支持依赖范围(scope),如compile、runtime、test、provided和system,定义了依赖在不同构建阶段的可见性。 总结,Maven是Java开发中不可或缺的工具,它提供了一套标准的项目管理框架,极大地提高了...

    使用Maven控件proguard-maven-plugin给可执行jar文件混淆

    `proguard-maven-plugin`还支持使用ProGuard的配置文件,通过`config`属性引入。例如,你可以在项目根目录下创建一个`proguard.conf`文件,然后在`configuration`中引用它: ```xml &lt;config&gt;proguard.conf ... ...

    基于maven的websocket实例

    &lt;scope&gt;provided&lt;/scope&gt; &lt;groupId&gt;org.glassfish.tyrus.bundles &lt;artifactId&gt;tyrus-standalone-client &lt;version&gt;1.18 ``` 接下来,我们需要实现WebSocket服务器端点。在Java中,这通常通过扩展`javax....

    maven项目构建文档

    每个依赖都有`groupId`、`artifactId`和`version`三个属性,例如: ```xml &lt;groupId&gt;com.example&lt;/groupId&gt; &lt;artifactId&gt;dependency-name &lt;version&gt;1.0.0 ``` ### **四、构建项目** 1. **编译与打包**: ...

    Maven权威指南 中文完整版清晰 完整目录

    - 依赖范围:理解scope属性,如compile、runtime、test、provided和system等。 - 依赖冲突解决:讲解Maven的依赖解决策略,如第一声明者优先原则和最新适用版本原则。 5. **插件和构建配置** - Maven插件:介绍...

    maven教程-v1.0

    - **依赖范围**:通过设置`scope`属性来控制依赖的有效范围,例如`compile`、`test`、`provided`等。 #### Maven工程文档 - **生成文档**:使用`mvn site`命令可以生成项目的文档网站。 - **文档内容**:包括项目...

    Maven 最新免安装版本

    1. **项目对象模型 (POM)**:POM是Maven的核心,是一个XML文件,包含了项目的配置信息,如项目属性、依赖、构建目标等。 2. **坐标 (Coordinates)**:每个Maven项目都有唯一的坐标,包括groupId、artifactId和...

    Maven入门到精通

    1. **项目对象模型(Project Object Model,POM)**:Maven的核心是POM,它包含了关于项目的所有信息,如项目属性、依赖、构建配置等。POM.xml文件位于项目的根目录下,是Maven理解项目的基础。 2. **坐标...

Global site tag (gtag.js) - Google Analytics