网站建设 聊城信息港,h5案例网站,株洲建设公司网站,怎么制作app网站文章目录 关于依赖管理坐标和 mvnrepository 网站pom.xml 中引包 依赖范围依赖传递依赖冲突 关于依赖管理
坐标和 mvnrepository 网站
在 maven 中通过『坐标』概念来确定一个唯一确定的 jar 包。坐标的组成部分有#xff1a;
元素说明groupId定义当前… 文章目录 关于依赖管理坐标和 mvnrepository 网站pom.xml 中引包 依赖范围依赖传递依赖冲突 关于依赖管理
坐标和 mvnrepository 网站
在 maven 中通过『坐标』概念来确定一个唯一确定的 jar 包。坐标的组成部分有
元素说明groupId定义当前 Maven 组织名称artifactId定义实际项目名称version定义当前项目的当前版本 [✔] 注意 任意两个不同包它们的这三个属性必定至少有一项是不同的。即三者的「组合」必须唯一。 那么如何确定一个 java 包的坐标通过 https://mvnrepository.com 。
mvnrepository 是一个与中央仓库对应的查询系统。在这里你可以查询你所需要的 java 包的坐标。
你只需要复制粘贴你所查到的 java 包的坐标 repository 片段即可。
pom.xml 中引包
「依赖管理」就是对项目中 jar 包的管理。可以在 pom.xml 文件中定义 jar 包的坐标管理依赖。
整体结构其它无关元素略
project
└── dependencies├── dependency├── dependency├── ...└── dependency例如
dependencies!--slf4j-api--dependencygroupIdorg.slf4j/groupIdartifactIdslf4j-api/artifactIdversion1.7.25/version/dependency!--slf4j-simple--dependencygroupIdorg.slf4j/groupIdartifactIdslf4j-simple/artifactIdversion1.7.25/version/dependencydependency ... /dependency dependency ... /dependency dependency ... /dependency /dependenciesmaven 项目会「引用」你本地仓库中的这些 java 包。理论上你的本地仓库「应该有」这些包如果没有maven 会先从网络仓库中下载它们。如果网络仓库也没有那么 maven 会报错。
这些 java 库在本地仓库的存放的路径规则是
%homepath%/.m2/repository/groupId/artifactId/version例如上面的 slf4j-api 在本地仓库中的存放路径就是
C:\Users\hello world\.m2\repository\org\slf4j\slf4j-api\1.7.25[✔] 注意 需要注意的是maven 项目是在「引用」这些 java 库。在项目最终打包前你的 maven 项目中并没有真正地「包含」这些 java 包你会发现无论你「引用」多少 java 包你的项目源码的文件夹大小实际上并没有增加其中只有你的项目源码。maven 就是通过这种方式来节约空间。 依赖范围
依赖范围Scope对 main classpath 有效对 test classpath 有效打入包中例子compileYesYesYeslog4jtest-Yes-junitprividedYesYes-servlet-apiruntime--Yesjdbc 驱动实现类
使用技巧
compile 是 scope 的默认值错将 runtime 写成 compile 对项目无影响错将 test 写成 compile 对项目无太大影响。不影响项目运行仅仅是项目的 jar/war 包会变大唯一需要仔细思考、分辨的是 provided 。如果 provided 被误写成了 compile 会导致项目发布运行时因为包冲突而无法运行或出现 bug 。 [!attention] 注意 你需要留意、甚至记忆哪些包应该是 provided 的。 依赖传递
dependencies!--dependencygroupIdorg.slf4j/groupIdartifactIdslf4j-api/artifactIdversion1.7.25/version/dependency--dependencygroupIdorg.slf4j/groupIdartifactIdslf4j-simple/artifactIdversion1.7.25/version/dependencydependencies前面的这个依赖可以将 slf4j-api 去掉也依然可行。原因在于虽然我们没有声明引用、使用 lslf4j-api 但是我们声明要引用、使用的 slf4j-simple 它要使用 slf4j-api 因此maven 仍然还是会把 slf4j-api 纳入我们的项目中。 [?] 我们如何知道 slf4j-simple 它会使用 slf4j-api 有两种方式 在 mvnrepository.com 中查询 slf4j-simple 时该网站上会列出它所依赖的其它的包如果有的话。 开发工具会有图形化界面让你能看到包的依赖关系你可以直观地看到slf4j-simple 依赖于 slf4j-api 。这样你可以对你的 repositories 进行优化。
依赖冲突
依赖冲突指的是你的项目中「包含了同一个包的两个不同版本」。这种情况下通常会导致项目报错或启动失败。
依赖冲突常见于两个场景 同一个项目的两个开发人员不约而同想到使用同一个 java 库而互相不知道。从而导致项目的 pom 中引入了同一个包的两个不同版本。 项目依赖于 A 和 B 两个库看似没有问题但是 B 库本身又依赖于 A 库或者是B 库依赖于 C 库而 C 库依赖于 A 库。从而导致项目中最终还是包含了 A 库的两个不同版本。
Maven 会自动解决依赖冲突问题它基于 2 个原则来处理 路径最近者优先 项目 A 有如下的依赖关系 A - B - C - X 1.0 A - D - X 2.0 maven 最终包含的会是 X 库的 2.0 版本。 路径相等先声明者优先 项目 A 有如下的依赖关系 A - B - Y1.0 A - C - Y2.0 若 pom 文件中 B 的依赖坐标先于 C 进行声明则最终 Y 的版本为 1.0 。
在开发工具中可以有图形化界面让你直观地看到依赖关系其中会将依赖冲突展示出来。IDEA 图形化展示效果比 Eclipse 要更好。