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基础操作的深入讲解,涵盖了项目创建、POM配置、依赖管理、生命周期和构建过程等内容,对于想要学习和掌握Maven的Java开发者来说,是一份非常实用的学习资料...
下载 `maven-compiler-plugin-3.8.0-source-release` 后,将其添加到 Maven 的本地仓库,或者在 `pom.xml` 中声明依赖,以便在构建过程中自动下载。对于大型项目,推荐使用 Maven 的私有仓库来存储常用插件,以提高...
`maven-archetype-quickstart` 就是这样一个archetype,它提供了一个简单的Java应用结构,包含了一个主类和一个测试类,适合初学者或者快速原型开发。 **快速启动Archetype的使用步骤:** 1. **安装Archetype**:...
maven-assembly-plugin-2.2-beta-5.jar
【标题】:“maven笔记:maven-overlay-实战笔记” 在 Maven 的世界里,"overlay" 是一个重要的概念,主要用于Web项目的构建和部署。Maven overlay 技术允许你将多个项目的输出“重叠”在一起,形成一个新的项目,...
maven-resources-plugin-2.4.1.jar
在解压后的“apache-maven-3.3.9”目录中,你会找到以下几个关键文件和目录: - `bin`:包含Maven的可执行脚本,如`mvn`命令行工具。 - `conf`:存储Maven的配置文件,如`settings.xml`,用于配置本地仓库位置、远程...
假设我们有一个简单的Maven项目,其`pom.xml`文件中配置了`maven-compiler-plugin`和`maven-jar-plugin`。当我们执行`mvn clean install`命令时,Maven将会按照以下顺序执行: 1. **clean**:执行Clean生命周期中的...
解决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-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是个项目管理工具,如果我们不告诉它我们的代码要使用什么样的jdk版本编译的话,它就会用maven-compiler-plugin默认的jdk版本来进行处理,这样就容易出现版本不匹配,以至于可能导致编译不通过的问题。...
2. **创建项目**:在命令行中,使用`mvn archetype:generate`命令,并指定对应的archetype id,如`maven-archetype-webapp`,然后按照提示输入项目信息,如groupId、artifactId和version。 3. **编译与运行**:生成...
通过手动配置和使用 `maven-ant-tasks-2.1.3.jar`,开发者可以在 Ant 构建环境中高效地管理依赖和执行 Maven 目标,提高开发效率。在实际项目中,根据具体的构建需求,合理运用 Maven Ant Tasks,可以大大提升开发和...
首先,你需要下载`apache-maven-3.6.0`压缩包。这个压缩包包含了Maven运行所需的所有文件,包括bin目录下的可执行脚本,lib目录中的依赖库,以及conf目录下的配置文件如settings.xml。下载完成后,解压到你选择的...
对于`maven-archetype-webapp-1.0.jar`创建的项目,`pom.xml`会预先配置好一些基础的Web应用依赖,如Servlet和JSP的相关库。 5. **运行和调试**:完成项目生成后,你可以通过Maven的生命周期命令(如`mvn compile`...
java运行依赖jar包
`maven-archetype-quickstart`是Maven官方提供的一个基础模板,它创建的项目包含了一个简单的"Hello World"应用程序,包括一个主类和一个测试类,这对于初学者和快速原型开发非常有用。当你尝试使用Maven创建项目但...
总之,Maven3实战笔记(整合)不仅涵盖了Maven的基本原理和核心功能,还深入探讨了如何将Maven应用于实际项目中,解决常见的构建问题,提高构建效率和项目质量。对于Java开发者而言,熟练掌握Maven的使用技巧,将大大...
插件是Maven功能的扩展,例如maven-compiler-plugin用于编译源代码,maven-surefire-plugin用于运行单元测试。通过在pom.xml中配置插件,开发者可以自定义构建过程,实现各种复杂的需求。 除了基本功能外,Maven还...
总结起来,"apache-maven-3.5.4-bin"压缩包包含的是一个完整的Maven 3.5.4发行版,它提供了一整套工具和框架,帮助Java开发者实现项目构建、依赖管理和版本控制。通过理解和掌握Maven,开发者可以提高工作效率,降低...