[英]How can I use my own parent.pom instead of the “spring-boot-starter-parent”?
[英]How to use Spring Boot BOM, instead of parent?
我需要在我的项目中使用BOM
,因此简化了管理依赖项的任务。 这是要求,我现阶段不能pivot。
我删除了父级 spring-boot 并添加了 AWS、Spring Boot 和 Junit5 作为BOM
。 问题是,即使我有它们,依赖项也没有正确下载。 我错过了一些插件还是我做错了什么?
我试过了:
以上所有工作正常。 添加 BOM 后我遇到的问题是:
package org.junit.jupiter.api does not exist
package org.mockito does not exist
cannot find symbol
[ERROR] symbol: class ExtendWith
我的 pom.xml 文件:
<?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>org.example</groupId>
<artifactId>bom-experiments</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<junit-jupiter.version>5.7.2</junit-jupiter.version>
<aws-sdk.version>2.18.16</aws-sdk.version>
<mockito-inline.version>4.8.0</mockito-inline.version>
<org.springframework.boot.version>2.7.5</org.springframework.boot.version>
<org.springframework.version>5.3.24</org.springframework.version>
<lombok.version>1.18.24</lombok.version>
<maven-compiler-plugin.version>3.10.1</maven-compiler-plugin.version>
<maven-surefire-plugin.version>3.0.0-M7</maven-surefire-plugin.version>
<junit-jupiter-params.version>${junit-jupiter.version}</junit-jupiter-params.version>
<kubernetes-maven-plugin.version>1.9.0</kubernetes-maven-plugin.version>
<!-- Plugins -->
<mockito.version>4.9.0</mockito.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-framework-bom</artifactId>
<version>${org.springframework.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${org.springframework.boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>bom</artifactId>
<version>${aws-sdk.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.junit</groupId>
<artifactId>junit-bom</artifactId>
<version>${junit-jupiter.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-bom</artifactId>
<version>${mockito.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!-- Secret managers -->
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>secretsmanager</artifactId>
</dependency>
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>ssm</artifactId>
</dependency>
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>sts</artifactId>
</dependency>
<!-- Lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
<scope>provided</scope>
</dependency>
<!-- Testing -->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-inline</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-junit-jupiter</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-params</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<finalName>bom-experiments</finalName>
<sourceDirectory>${project.basedir}</sourceDirectory>
<testSourceDirectory>${project.basedir}/src/test</testSourceDirectory>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>${maven-surefire-plugin.version}</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>${maven-compiler-plugin.version}</version>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${org.springframework.boot.version}</version>
</plugin>
</plugins>
</build>
</project>
我对 BOM 概念的理解有误吗? 为什么没有依赖项,即使它们在 pom.xml 中声明? 如何在没有父级但有 BOM 的情况下运行此代码?
通过dependencyManagement和 scope import导入 BOM 将它们的dependencyManagement配置复制到您当前的dependencyManagement中,就像您编写这些dependencyManagement配置一样。
dependencyManagement部分只能在pom打包的 POM 中使用。 生成的pom工件可以用作其他 POM 的父级。
因此,您不应在没有父项的情况下使用 BOM。
仔细看看https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html
我遇到的问题与pom.xml
中的错误配置有关
代替
<sourceDirectory>${project.basedir}</sourceDirectory>
我必须使用
<sourceDirectory>${project.basedir}/src/main</sourceDirectory>
也就是说,package 可能不同于pom
包装,因此我可以使用jar
或其他替代方案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.