maven 版本如何工作,无法更新 ojdbc8 版本
how maven version working, can't update ojdbc8 version
示例代码:
https://github.com/yszzu1/mvn-version-test
问题:
1。为什么管理模块总是 使用 ojdbc8 19.3.0.0 ?
# mvn dependency:tree
[INFO] --- maven-dependency-plugin:3.1.2:tree (default-cli) @ admin-module ---
[INFO] org.example:admin-module:jar:3.12.0
[INFO] +- org.example:db-module:jar:3.12.0:compile
[INFO] | \- com.oracle.database.jdbc:ojdbc8:jar:19.3.0.0:compile
我们可以看到 db 模块正在使用 19.9.0.0
2。即使在使用
升级 db-module pom.xml
之后
<dependency>
<groupId>com.oracle.database.jdbc</groupId>
<artifactId>ojdbc8</artifactId>
<version>21.1.0.0</version>
</dependency>
,管理模块 mvn dependency:tree
仍然显示 19.3.0.0
mvn & windows & JVM 版本:
# mvn --version
Apache Maven 3.8.5 (3599d3414f046de2324203b78ddcf9b5e4388aa0)
Maven home: C:\Users\shuayan\Documents\open\apache-maven-3.8.5
Java version: 1.8.0_321, vendor: Oracle Corporation, runtime: C:\Program Files\Java\jdk1.8.0_321\jre
Default locale: en_US, platform encoding: Cp1252
OS name: "windows 11", version: "10.0", arch: "amd64", family: "windows"
顺便说一句:我已经阅读了这两个 wiki
https://www.mojohaus.org/versions-maven-plugin/faq.html
https://docs.oracle.com/middleware/1212/core/MAVEN/maven_version.htm#MAVEN401
这就是依赖管理在 maven 中的工作方式。
- 您已经为 db-module 定义了直接的 ojdbc8 依赖关系,它确实按预期工作
- admin-module 情况“有点不同”:
- 它直接依赖于db-module,ojdbc8现在是一个传递依赖
- 它继承了spring-boot-starter-parent的ojdbc8版本(实际上是spring-boot-dependencies)
如果您真的想使用 spring-boot-starter-parent
作为父项,您需要按以下方式配置您的项目:
/pom.xml:
<properties>
...
<ojdbc.version>21.1.0.0</ojdbc.version>
<oracle-database.version>21.1.0.0</oracle-database.version>
...
</properties>
/db-module/pom.xml:
<dependencies>
<dependency>
<groupId>com.oracle.database.jdbc</groupId>
<artifactId>ojdbc8</artifactId>
<!-- omit version information -->
</dependency>
</dependencies>
示例代码:
https://github.com/yszzu1/mvn-version-test
问题:
1。为什么管理模块总是 使用 ojdbc8 19.3.0.0 ?
# mvn dependency:tree
[INFO] --- maven-dependency-plugin:3.1.2:tree (default-cli) @ admin-module ---
[INFO] org.example:admin-module:jar:3.12.0
[INFO] +- org.example:db-module:jar:3.12.0:compile
[INFO] | \- com.oracle.database.jdbc:ojdbc8:jar:19.3.0.0:compile
我们可以看到 db 模块正在使用 19.9.0.0
2。即使在使用
升级 db-modulepom.xml
之后
<dependency>
<groupId>com.oracle.database.jdbc</groupId>
<artifactId>ojdbc8</artifactId>
<version>21.1.0.0</version>
</dependency>
,管理模块 mvn dependency:tree
仍然显示 19.3.0.0
mvn & windows & JVM 版本:
# mvn --version
Apache Maven 3.8.5 (3599d3414f046de2324203b78ddcf9b5e4388aa0)
Maven home: C:\Users\shuayan\Documents\open\apache-maven-3.8.5
Java version: 1.8.0_321, vendor: Oracle Corporation, runtime: C:\Program Files\Java\jdk1.8.0_321\jre
Default locale: en_US, platform encoding: Cp1252
OS name: "windows 11", version: "10.0", arch: "amd64", family: "windows"
顺便说一句:我已经阅读了这两个 wiki
https://www.mojohaus.org/versions-maven-plugin/faq.html
https://docs.oracle.com/middleware/1212/core/MAVEN/maven_version.htm#MAVEN401
这就是依赖管理在 maven 中的工作方式。
- 您已经为 db-module 定义了直接的 ojdbc8 依赖关系,它确实按预期工作
- admin-module 情况“有点不同”:
- 它直接依赖于db-module,ojdbc8现在是一个传递依赖
- 它继承了spring-boot-starter-parent的ojdbc8版本(实际上是spring-boot-dependencies)
如果您真的想使用 spring-boot-starter-parent
作为父项,您需要按以下方式配置您的项目:
/pom.xml:
<properties>
...
<ojdbc.version>21.1.0.0</ojdbc.version>
<oracle-database.version>21.1.0.0</oracle-database.version>
...
</properties>
/db-module/pom.xml:
<dependencies>
<dependency>
<groupId>com.oracle.database.jdbc</groupId>
<artifactId>ojdbc8</artifactId>
<!-- omit version information -->
</dependency>
</dependencies>