- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
下面显示了我的 POM 的层次结构。
可以看到我们有一个spring boot项目的company parent-pom。这个 POM 有 spring-boot-starter 作为它的父级,它导入了我们自己的依赖管理 BOM。
[INFO] --- hierarchy-maven-plugin:1.4:tree (default-cli) @ user-service ---
[INFO] PARENT com.MY_COMPANY.platform:user:3.20.14-SNAPSHOT
[INFO] PARENT com.MY_COMPANY.platform:spring-boot-parent:3.20.12-SNAPSHOT
[INFO] PARENT org.springframework.boot:spring-boot-starter-parent:1.5.12.RELEASE
[INFO] PARENT org.springframework.boot:spring-boot-dependencies:1.5.12.RELEASE <<<< This pom defines assertJ 2.x
[INFO] [ other imports ]
[INFO] IMPORT com.MY_COMPANY:dependencyManagementBase:2.23.14-SNAPSHOT <<<<<<<<<<<< This pom defines assertJ 3.x
[INFO] IMPORT com.MY_COMPANY.platform:platform-dependency-management:1.20.7
[INFO] ------------------------------------------------------------------------
为了专注于特定,我们在依赖管理中定义了 AssertJ 3;然而,spring-boot-dependencies 定义了 AssertJ 2。与 assertJ 没什么大不了的,但是还有其他鱼,比如 Mongo-Java-Driver 没有选择我们的版本。
Maven 在这里如何选择优先级?为什么我们的依赖管理没有战胜远祖的依赖管理?
我还注意到,如果我将 AssertJ 添加为 MY_COMPANY.platform:spring-boot-parent 的依赖项,它也不会在我们的依赖项管理中使用该版本(因此我暂时将其保留在那里,所以显微镜下的层级更短)。
编辑 - 添加缩写的 POM
com.MY_COMPANY.platform:spring-boot-parent
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.MYCOMPANY.platform</groupId>
<artifactId>spring-boot-parent</artifactId>
<version>3.20.12-SNAPSHOT</version>
<packaging>pom</packaging>
<prerequisites>
<maven>3.0.4</maven>
</prerequisites>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.12.RELEASE</version>
</parent>
<properties>
<MYCOMPANYdependencymanagement.version>2.23.13</MYCOMPANYdependencymanagement.version>
</properties>
<dependencies>
<dependency>
<groupId>org.assertj</groupId>
<artifactId>assertj-core</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.MYCOMPANY</groupId>
<artifactId>dependencyManagementBase</artifactId>
<version>${MYCOMPANYdependencymanagement.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
</project>
com.MY_COMPANY:dependencyManagementBase
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.MYCOMPANY</groupId>
<artifactId>dependencyManagementBase</artifactId>
<version>2.23.13</version>
<packaging>pom</packaging>
<modules>
<module>spring-dep-man</module>
</modules>
<properties>
<org.assertj-core.version>3.5.2</org.assertj-core.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.assertj</groupId>
<artifactId>assertj-core</artifactId>
<version>${org.assertj-core.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
</dependencyManagement>
</project>
**编辑 2 - 添加显示不同版本的详细层次结构 **
~/p/springbootparentpom> mvn hierarchy:tree -Dlevel=full
[INFO] --- hierarchy-maven-plugin:1.4:tree (default-cli) @ spring-boot-parent ---
[INFO] Displaying hierarchy.
[INFO] PARENT org.springframework.boot:spring-boot-starter-parent:1.5.12.RELEASE
[INFO] PARENT org.springframework.boot:spring-boot-dependencies:1.5.12.RELEASE
[INFO] DEP_MANAGEMENT ........
[INFO] DEP_MANAGEMENT org.assertj:assertj-core:2.6.0
[INFO] [ ... Many DEP_MAN and IMPORT ... ]
[INFO] IMPORT com.MYCOMPANY:dependencyManagementBase:2.23.14-SNAPSHOT
[INFO] DEP_MANAGEMENT ........
[INFO] DEP_MANAGEMENT org.assertj:assertj-core:3.5.2
[INFO] DEP_MANAGEMENT ........
最佳答案
我的猜测是它正在抓最近的。
Dependency mediation - this determines what version of a dependency will be used when multiple versions of an artifact are encountered. Currently, Maven 2.0 only supports using the "nearest definition" which means that it will use the version of the closest dependency to your project in the tree of dependencies. You can always guarantee a version by declaring it explicitly in your project's POM. Note that if two dependency versions are at the same depth in the dependency tree, until Maven 2.0.8 it was not defined which one would win, but since Maven 2.0.9 it's the order in the declaration that counts: the first declaration wins.
我为此类事情所做的是转到我的 IDE 的给定项目的依赖项部分。它向我显示了所有依赖项、版本和来源(有关示例,请参见下图弹出窗口的底部)。
关于java - Maven 从曾祖 parent 而不是我们的 parent 依赖管理中采购依赖版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50183956/
我正在尝试在主目录中设置.vimrc文件。它包含的唯一内容是以下内容。 " Enable syntax highlighting syntax on 每当我想要来源运行. ~/.vimrc的文件时,都
我有权访问我试图在其上运行 Django REST 应用程序的 Dreamhost 子域。该服务器在 Ubuntu 12.04.5 LTS 上运行。我的虚拟环境出了点问题,所以我正在尝试关注 Drea
我已经在这个语法错误上停留了几个小时,有人可以帮我吗? root@wxserv:~/rap# source ~/.cshrc bash: /home/kbroeren/.cshrc: line 9:
我有一个如下所示的 bash 脚本 a.sh: #!/bin/bash echo $# echo $1 和一个如下所示的脚本 b.sh: #!/bin/bash source ./a.sh 如果我调用
我有一个如下所示的 bash 脚本 a.sh: #!/bin/bash echo $# echo $1 和一个如下所示的脚本 b.sh: #!/bin/bash source ./a.sh 如果我调用
在我的.cshrc中,LD_LIBRARY_PATH原来是这样的: setenv LD_LIBRARY_PATH path_one:$LD_LIBRARY_PATH 我编辑 .cshrc 以将 pat
我原来的 .bashrc 脚本目前用于运行模型运行。现在我需要操纵它来编译一个全新的模型。 我的问题是,如果我将原始 .bashrc 保存为诸如 .bwwbashrc 之类的东西,我是否需要以某种方式
最近,我遇到了 Linux 命令 source 然后找到了 this answer关于它的作用。 我的理解是 source 执行传递给它的文件,它确实适用于一个简单的 shell 脚本。然后我尝试在
我有一个脚本,用于在调用 csh shell 中设置一些环境变量。其中一些变量取决于脚本的位置。 如果该文件是正确的 csh 脚本,我可以使用 $0 访问 __FILE__但如果我使用源代码运行脚本,
我在“Ubuntu 14.04.5 LTS”上新安装了 Anaconda (Anaconda3-2019.07-Linux-x86_64),但激活安装失败: source ~/.bashrc返回 Il
有没有办法从网络上获取 R 脚本? 例如source('http://github.com/project/R/file.r') 原因:我目前有一个项目,我想让它可供使用,但还没有准备好打包。因此,最
我发现在使用 && 进行流水线处理时,获取以下 bash 脚本不会导致命令序列停止。 sourceme.sh: #!/usr/bin/env bash set -o errexit set -o |
我目前正在尝试使用 python 为我的团队编写一些组件测试,我遇到了一个测试程序,该程序告诉测试人员获取一个 csh 文件。这个文件有一堆 setenv 命令和别名。链中的下一个可执行文件需要所有这
我正在运行 neovim 0.7.0,我的 .vimrc 位于 ~/.config/nvim/init.vim 我还有以下文件:~/.config/nvim/lua/statusline.lua 一行
我正在运行 neovim 0.7.0,我的 .vimrc 位于 ~/.config/nvim/init.vim 我还有以下文件:~/.config/nvim/lua/statusline.lua 一行
代码片段取自 chernan's sample REST queries用于定义 R6 类的一个私有(private)方法、两个公共(public)属性和一个构造函数: library(R6) lib
我正在阅读 O'Reilly 出版的“Learning MySQL”一书,我正在尝试获取本书网站上发布的以下 SQL 代码: DROP DATABASE IF EXISTS music; CREATE
我在从我的 Ubuntu 10.04 .profile 获取 Ruby 版本管理器 rvm 时遇到问题。代码: [[ -s "$HOME/.rvm/scripts/rvm" ] && . "$HOME
我想将 Anaconda Python 作为我的默认 Python 环境。 为了在系统 Python 上使用 Anaconda,我一直在研究以下两个选项: 将 Anaconda bin 路径添加到我的
这类似于 How to source R Markdown file like `source('myfile.r')`?有以下区别:我希望我的 Markdown 文件生成一个 R 脚本以供将来采购。
我是一名优秀的程序员,十分优秀!