`
ln_ydc
  • 浏览: 270776 次
  • 性别: Icon_minigender_1
  • 来自: 青岛
社区版块
存档分类
最新评论

Maven入门实战笔记03-坐标和依赖

 
阅读更多

 

坐标

1.坐标,就是构件(各种jar包)的地址

2.坐标元素:

groupId:定义当前Maven项目隶属的实际项目,类似于java的包名,如com.iteye.ln-ydc.mvndemo(com.iteye.ln-ydc是组织名,mvndemo是实际项目名)

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

version:定义Maven项目当前所处的版本

packaging:定义Maven项目的打包方式,默认为jar

classifier:帮助定义构建输出的一些附属构件

注:1.groupId、artifactId、version必须定义,packaging可选,classifier不能直接定义

2.项目构件的文件名是与坐标相对应的,一般规则:artifactId-version[-classifier].packaging

-------------------------------------------------------------------------

依赖

1.依赖范围

compile:编译

test:测试

provided:已提供依赖范围(对编译和测试classpath有效)

runtime:运行时

system:系统

import:导入

2.依赖范围与classpath的关系

依赖范围(scope) 编译 测试 运行 例子
compile Y Y Y spring-core
test - Y - JUnit
provided Y Y - servlet-api
runtime - Y Y jdbc driver
system Y Y - 本地的

 

 

 

 

 

 

 

 

 

 

3.传递性依赖

A依赖B,B依赖C,A与B的依赖关系为传递性依赖

4.传递性依赖和依赖范围

A对B的依赖为第一直接依赖范围,B对C的依赖为第二直接依赖范围,A对C的依赖为传递性依赖范围

  compile test provided runtime
compile compile - - runtime
test test - - test
provided provided - provided provided
runtime runtime - - runtime

 

 

 

 

 

 

 

 

5.依赖调解

原则一:路径近者优先,如A->B-C->X(1.0)、A->D->X(2.0),X(2.0)会被解析使用

原则二:第一声明者优先,依赖路径长度相同,先声明者优先

6.可选依赖

A依赖于B,B依赖于X(可选),B依赖于Y(可选),即A->B,B->X(可选),B->Y(可选)

由于X、Y是可选依赖,依赖将不会得以传递

例如:B有两个特性X和Y,且这两个特性互斥,如B支持MySQL和Oracle两种数据库,因此,当项目A依赖于项目By时,如果实际使用基于MySQL数据库,那么在项目A中就需要显式地声明mysql-connector-java这一依赖

在理想情况下,是不应该使用可选依赖的

使用可选依赖,是某一个项目实现了多个特性

单一职责原则,一个类就该只有一项职责

7.最佳实践

1.排除依赖,不稳定的版本要排除,声明稳定的版本

2.归类依赖,对于一类依赖的版本进行统一定义

3.优化依赖,以下命令参考Maven入门实战笔记02中的相关命令

mvn dependency:list

mvn dependency:tree

mvn dependency:analyze

 used undeclared dependencies ,项目中使用到,但是没有显式声明的依赖,这种依赖存在潜在的风险

显式声明 任何项目中直接用到的依赖

unused declared dependencies,项目中未使用的,但是显式声明的依赖,对这一类依赖,应仔细分析

 

 

 

 

分享到:
评论

相关推荐

    Maven入门实战笔记02-基础(2)

    总的来说,"Maven入门实战笔记02-基础(2)"很可能是对Maven基础操作的深入讲解,涵盖了项目创建、POM配置、依赖管理、生命周期和构建过程等内容,对于想要学习和掌握Maven的Java开发者来说,是一份非常实用的学习资料...

    maven-compiler-plugin-3.8.0-source-release插件

    下载 `maven-compiler-plugin-3.8.0-source-release` 后,将其添加到 Maven 的本地仓库,或者在 `pom.xml` 中声明依赖,以便在构建过程中自动下载。对于大型项目,推荐使用 Maven 的私有仓库来存储常用插件,以提高...

    maven-archetype-quickstart-1.1.jar包下载

    `maven-archetype-quickstart` 就是这样一个archetype,它提供了一个简单的Java应用结构,包含了一个主类和一个测试类,适合初学者或者快速原型开发。 **快速启动Archetype的使用步骤:** 1. **安装Archetype**:...

    最新Maven-apache-maven-3.8.1-Repository-配置好的

    - **插件**: Maven的扩展性主要体现在插件上,如`maven-compiler-plugin`用于编译Java代码,`maven-surefire-plugin`用于执行单元测试。 - **版本控制**: Maven遵循严格的版本号规则,例如`1.0.0-SNAPSHOT`表示开发...

    maven-assembly-plugin-2.2-beta-5.jar

    maven-assembly-plugin-2.2-beta-5.jar

    maven笔记:maven-overlay-实战笔记

    【标题】:“maven笔记:maven-overlay-实战笔记” 在 Maven 的世界里,"overlay" 是一个重要的概念,主要用于Web项目的构建和部署。Maven overlay 技术允许你将多个项目的输出“重叠”在一起,形成一个新的项目,...

    maven-resources-plugin-2.4.1.jar

    maven-resources-plugin-2.4.1.jar

    maven资源 apache-maven-3.3.9-bin.zip

    在解压后的“apache-maven-3.3.9”目录中,你会找到以下几个关键文件和目录: - `bin`:包含Maven的可执行脚本,如`mvn`命令行工具。 - `conf`:存储Maven的配置文件,如`settings.xml`,用于配置本地仓库位置、远程...

    Maven3实战笔记04Maven的生命周期和插件

    假设我们有一个简单的Maven项目,其`pom.xml`文件中配置了`maven-compiler-plugin`和`maven-jar-plugin`。当我们执行`mvn clean install`命令时,Maven将会按照以下顺序执行: 1. **clean**:执行Clean生命周期中的...

    maven jar包

    maven-aether-provider-3.2.1-sources.jar maven-antrun-plugin-1.3.jar maven-archiver-2.2.jar maven-artifact-3.2.1-sources.jar maven-assembly-plugin-2.2-beta-5.jar maven-bundle-plugin-1.0.0.jar maven-...

    maven-compiler-plugin-3.8.1.jar

    maven是个项目管理工具,如果我们不告诉它我们的代码要使用什么样的jdk版本编译的话,它就会用maven-compiler-plugin默认的jdk版本来进行处理,这样就容易出现版本不匹配,以至于可能导致编译不通过的问题。...

    maven-archetype-quickstart-1.1.jar下载

    解决Unable to create project from archetype [org.apache.maven.archetypes:maven-archetype-quickstart:1.1] 1. 下载maven-archetype-quickstart-1.1.jar 文件地址: 2.cmd窗口执行mvn install:install-file -...

    maven-archetype-webapp-1.0.jar下载

    2. **创建项目**:在命令行中,使用`mvn archetype:generate`命令,并指定对应的archetype id,如`maven-archetype-webapp`,然后按照提示输入项目信息,如groupId、artifactId和version。 3. **编译与运行**:生成...

    apache-maven-3.6.0_apache-maven-3.6.0_maven压缩包_maven3.6.0下载_

    首先,你需要下载`apache-maven-3.6.0`压缩包。这个压缩包包含了Maven运行所需的所有文件,包括bin目录下的可执行脚本,lib目录中的依赖库,以及conf目录下的配置文件如settings.xml。下载完成后,解压到你选择的...

    maven-ant-tasks-2.1.3.zip

    通过手动配置和使用 `maven-ant-tasks-2.1.3.jar`,开发者可以在 Ant 构建环境中高效地管理依赖和执行 Maven 目标,提高开发效率。在实际项目中,根据具体的构建需求,合理运用 Maven Ant Tasks,可以大大提升开发和...

    maven-archetype-webapp-1.0.jar

    对于`maven-archetype-webapp-1.0.jar`创建的项目,`pom.xml`会预先配置好一些基础的Web应用依赖,如Servlet和JSP的相关库。 5. **运行和调试**:完成项目生成后,你可以通过Maven的生命周期命令(如`mvn compile`...

    maven-war-plugin-3.2.3.jar

    java运行依赖jar包

    Maven使用tomcat8-maven-plugin插件.docx

    Maven 使用 tomcat8-maven-plugin 插件 Maven 是一个流行的构建自动化工具,它可以帮助开发者自动完成项目的编译、测试、打包、部署等任务。...在本文中,我们详细介绍了 tomcat8-maven-plugin 插件的使用方法和优点。

    新建maven项目失败需要的jar包,maven-archetype-quickstart-1.1.jar

    `maven-archetype-quickstart`是Maven官方提供的一个基础模板,它创建的项目包含了一个简单的"Hello World"应用程序,包括一个主类和一个测试类,这对于初学者和快速原型开发非常有用。当你尝试使用Maven创建项目但...

    Maven3实战笔记(整合)

    总之,Maven3实战笔记(整合)不仅涵盖了Maven的基本原理和核心功能,还深入探讨了如何将Maven应用于实际项目中,解决常见的构建问题,提高构建效率和项目质量。对于Java开发者而言,熟练掌握Maven的使用技巧,将大大...

Global site tag (gtag.js) - Google Analytics