3.0.4
1. 使用文件
Spring Cloud CircuitBreaker 專案包含 Resilience4J 和 Spring Retry 的實現。Spring Cloud CircuitBreaker 中實現的 API 存在於 Spring Cloud Commons 中。這些 API 的使用文件位於Spring Cloud Commons 文件中。
1.1. 配置 Resilience4J 斷路器
1.1.1. 啟動器
Resilience4J 實現有兩個啟動器,一個用於響應式應用程式,一個用於非響應式應用程式。
-
org.springframework.cloud:spring-cloud-starter-circuitbreaker-resilience4j- 非響應式應用程式 -
org.springframework.cloud:spring-cloud-starter-circuitbreaker-reactor-resilience4j- 響應式應用程式
1.1.2. 自動配置
透過將 spring.cloud.circuitbreaker.resilience4j.enabled 設定為 false,可以停用 Resilience4J 自動配置。
1.1.3. 預設配置
要為所有斷路器提供預設配置,請建立一個 Customizer bean,該 bean 接收 Resilience4JCircuitBreakerFactory 或 ReactiveResilience4JCircuitBreakerFactory。可以使用 configureDefault 方法提供預設配置。
@Bean
public Customizer<Resilience4JCircuitBreakerFactory> defaultCustomizer() {
return factory -> factory.configureDefault(id -> new Resilience4JConfigBuilder(id)
.timeLimiterConfig(TimeLimiterConfig.custom().timeoutDuration(Duration.ofSeconds(4)).build())
.circuitBreakerConfig(CircuitBreakerConfig.ofDefaults())
.build());
}
響應式示例
@Bean
public Customizer<ReactiveResilience4JCircuitBreakerFactory> defaultCustomizer() {
return factory -> factory.configureDefault(id -> new Resilience4JConfigBuilder(id)
.circuitBreakerConfig(CircuitBreakerConfig.ofDefaults())
.timeLimiterConfig(TimeLimiterConfig.custom().timeoutDuration(Duration.ofSeconds(4)).build()).build());
}
自定義 ExecutorService
如果要配置執行斷路器的 ExecutorService,可以使用 Resilience4JCircuitBreakerFactory 進行配置。
例如,如果要使用上下文感知的 ExecutorService,可以執行以下操作。
@Bean
public Customizer<ReactiveResilience4JCircuitBreakerFactory> defaultCustomizer() {
return factory -> {
ContextAwareScheduledThreadPoolExecutor executor = ContextAwareScheduledThreadPoolExecutor.newScheduledThreadPool().corePoolSize(5)
.build();
factory.configureExecutorService(executor);
};
}
1.1.4. 特定斷路器配置
與提供預設配置類似,您可以建立一個 Customizer bean,該 bean 接收 Resilience4JCircuitBreakerFactory 或 ReactiveResilience4JCircuitBreakerFactory。
@Bean
public Customizer<Resilience4JCircuitBreakerFactory> slowCustomizer() {
return factory -> factory.configure(builder -> builder.circuitBreakerConfig(CircuitBreakerConfig.ofDefaults())
.timeLimiterConfig(TimeLimiterConfig.custom().timeoutDuration(Duration.ofSeconds(2)).build()), "slow");
}
除了配置建立的斷路器之外,您還可以在斷路器建立後但在返回給呼叫者之前對其進行自定義。為此,可以使用 addCircuitBreakerCustomizer 方法。這對於向 Resilience4J 斷路器新增事件處理程式非常有用。
@Bean
public Customizer<Resilience4JCircuitBreakerFactory> slowCustomizer() {
return factory -> factory.addCircuitBreakerCustomizer(circuitBreaker -> circuitBreaker.getEventPublisher()
.onError(normalFluxErrorConsumer).onSuccess(normalFluxSuccessConsumer), "normalflux");
}
響應式示例
@Bean
public Customizer<ReactiveResilience4JCircuitBreakerFactory> slowCustomizer() {
return factory -> {
factory.configure(builder -> builder
.timeLimiterConfig(TimeLimiterConfig.custom().timeoutDuration(Duration.ofSeconds(2)).build())
.circuitBreakerConfig(CircuitBreakerConfig.ofDefaults()), "slow", "slowflux");
factory.addCircuitBreakerCustomizer(circuitBreaker -> circuitBreaker.getEventPublisher()
.onError(normalFluxErrorConsumer).onSuccess(normalFluxSuccessConsumer), "normalflux");
};
}
1.1.5. 斷路器屬性配置
您可以在應用程式的配置檔案中配置 CircuitBreaker 和 TimeLimiter 配置或例項。屬性配置的優先順序高於 Java Customizer 配置。
優先順序從高到低依次為:
-
方法(id) 配置 - 針對特定方法或操作
-
服務(組) 配置 - 針對特定應用程式服務或操作
-
全域性預設配置
ReactiveResilience4JCircuitBreakerFactory.create(String id, String groupName)
Resilience4JCircuitBreakerFactory.create(String id, String groupName)
全域性預設屬性配置
resilience4j.circuitbreaker:
configs:
default:
registerHealthIndicator: true
slidingWindowSize: 50
resilience4j.timelimiter:
configs:
default:
timeoutDuration: 5s
cancelRunningFuture: true
配置屬性配置
resilience4j.circuitbreaker:
configs:
groupA:
registerHealthIndicator: true
slidingWindowSize: 200
resilience4j.timelimiter:
configs:
groupC:
timeoutDuration: 3s
cancelRunningFuture: true
例項屬性配置
resilience4j.circuitbreaker:
instances:
backendA:
registerHealthIndicator: true
slidingWindowSize: 100
backendB:
registerHealthIndicator: true
slidingWindowSize: 10
permittedNumberOfCallsInHalfOpenState: 3
slidingWindowType: TIME_BASED
recordFailurePredicate: io.github.robwin.exception.RecordFailurePredicate
resilience4j.timelimiter:
instances:
backendA:
timeoutDuration: 2s
cancelRunningFuture: true
backendB:
timeoutDuration: 1s
cancelRunningFuture: false
-
ReactiveResilience4JCircuitBreakerFactory.create("backendA")或Resilience4JCircuitBreakerFactory.create("backendA")將應用instances backendA properties -
ReactiveResilience4JCircuitBreakerFactory.create("backendA", "groupA")或Resilience4JCircuitBreakerFactory.create("backendA", "groupA")將應用instances backendA properties -
ReactiveResilience4JCircuitBreakerFactory.create("backendC")或Resilience4JCircuitBreakerFactory.create("backendC")將應用global default properties -
ReactiveResilience4JCircuitBreakerFactory.create("backendC", "groupC")或Resilience4JCircuitBreakerFactory.create("backendC", "groupC")將應用global default CircuitBreaker properties 和 config groupC TimeLimiter properties
有關 Resilience4j 屬性配置的更多資訊,請參閱Resilience4J Spring Boot 2 配置。
1.1.6. 艙壁模式支援
如果 resilience4j-bulkhead 在類路徑中,Spring Cloud CircuitBreaker 將使用 Resilience4j 艙壁包裝所有方法。透過將 spring.cloud.circuitbreaker.bulkhead.resilience4j.enabled 設定為 false,可以停用 Resilience4j 艙壁。
Spring Cloud CircuitBreaker Resilience4j 提供了兩種艙壁模式實現
-
使用訊號量的
SemaphoreBulkhead -
使用有界佇列和固定執行緒池的
FixedThreadPoolBulkhead。
預設情況下,Spring Cloud CircuitBreaker Resilience4j 使用 FixedThreadPoolBulkhead。要修改預設行為以使用 SemaphoreBulkhead,請將屬性 spring.cloud.circuitbreaker.resilience4j.enableSemaphoreDefaultBulkhead 設定為 true。
有關艙壁模式實現的更多資訊,請參閱Resilience4j 艙壁。
Customizer<Resilience4jBulkheadProvider> 可用於提供預設的 Bulkhead 和 ThreadPoolBulkhead 配置。
@Bean
public Customizer<Resilience4jBulkheadProvider> defaultBulkheadCustomizer() {
return provider -> provider.configureDefault(id -> new Resilience4jBulkheadConfigurationBuilder()
.bulkheadConfig(BulkheadConfig.custom().maxConcurrentCalls(4).build())
.threadPoolBulkheadConfig(ThreadPoolBulkheadConfig.custom().coreThreadPoolSize(1).maxThreadPoolSize(1).build())
.build()
);
}
1.1.7. 特定艙壁配置
與提供預設的“Bulkhead”或“ThreadPoolBulkhead”配置類似,您可以建立一個 Customizer bean,該 bean 接收 Resilience4jBulkheadProvider。
@Bean
public Customizer<Resilience4jBulkheadProvider> slowBulkheadProviderCustomizer() {
return provider -> provider.configure(builder -> builder
.bulkheadConfig(BulkheadConfig.custom().maxConcurrentCalls(1).build())
.threadPoolBulkheadConfig(ThreadPoolBulkheadConfig.ofDefaults()), "slowBulkhead");
}
除了配置建立的艙壁之外,您還可以在艙壁和執行緒池艙壁建立後但在返回給呼叫者之前對其進行自定義。為此,可以使用 addBulkheadCustomizer 和 addThreadPoolBulkheadCustomizer 方法。
艙壁示例
@Bean
public Customizer<Resilience4jBulkheadProvider> customizer() {
return provider -> provider.addBulkheadCustomizer(bulkhead -> bulkhead.getEventPublisher()
.onCallRejected(slowRejectedConsumer)
.onCallFinished(slowFinishedConsumer), "slowBulkhead");
}
執行緒池艙壁示例
@Bean
public Customizer<Resilience4jBulkheadProvider> slowThreadPoolBulkheadCustomizer() {
return provider -> provider.addThreadPoolBulkheadCustomizer(threadPoolBulkhead -> threadPoolBulkhead.getEventPublisher()
.onCallRejected(slowThreadPoolRejectedConsumer)
.onCallFinished(slowThreadPoolFinishedConsumer), "slowThreadPoolBulkhead");
}
1.1.8. 艙壁屬性配置
您可以在應用程式的配置檔案中配置 ThreadPoolBulkhead 和 SemaphoreBulkhead 例項。屬性配置的優先順序高於 Java Customizer 配置。
resilience4j.thread-pool-bulkhead:
instances:
backendA:
maxThreadPoolSize: 1
coreThreadPoolSize: 1
resilience4j.bulkhead:
instances:
backendB:
maxConcurrentCalls: 10
有關 Resilience4j 屬性配置的更多資訊,請參閱Resilience4J Spring Boot 2 配置。
1.1.9. 收集指標
Spring Cloud Circuit Breaker Resilience4j 包含自動配置,只要類路徑中包含正確的依賴項,即可設定指標收集。要啟用指標收集,必須包含 org.springframework.boot:spring-boot-starter-actuator 和 io.github.resilience4j:resilience4j-micrometer。有關存在這些依賴項時生成的指標的更多資訊,請參閱Resilience4j 文件。
您無需直接包含 micrometer-core,因為它由 spring-boot-starter-actuator 引入。 |
1.2. 配置 Spring Retry 斷路器
Spring Retry 為 Spring 應用程式提供了宣告式重試支援。該專案的一個子集包括實現斷路器功能的能力。Spring Retry 透過其 CircuitBreakerRetryPolicy 和 有狀態重試 的組合提供斷路器實現。所有使用 Spring Retry 建立的斷路器都將使用 CircuitBreakerRetryPolicy 和 DefaultRetryState 建立。這兩個類都可以使用 SpringRetryConfigBuilder 進行配置。
1.2.1. 預設配置
要為所有斷路器提供預設配置,請建立一個 Customizer bean,該 bean 接收 SpringRetryCircuitBreakerFactory。可以使用 configureDefault 方法提供預設配置。
@Bean
public Customizer<SpringRetryCircuitBreakerFactory> defaultCustomizer() {
return factory -> factory.configureDefault(id -> new SpringRetryConfigBuilder(id)
.retryPolicy(new TimeoutRetryPolicy()).build());
}
1.2.2. 特定斷路器配置
與提供預設配置類似,您可以建立一個 Customizer bean,該 bean 接收 SpringRetryCircuitBreakerFactory。
@Bean
public Customizer<SpringRetryCircuitBreakerFactory> slowCustomizer() {
return factory -> factory.configure(builder -> builder.retryPolicy(new SimpleRetryPolicy(1)).build(), "slow");
}
除了配置建立的斷路器之外,您還可以在斷路器建立後但在返回給呼叫者之前對其進行自定義。為此,可以使用 addRetryTemplateCustomizers 方法。這對於向 RetryTemplate 新增事件處理程式非常有用。
@Bean
public Customizer<SpringRetryCircuitBreakerFactory> slowCustomizer() {
return factory -> factory.addRetryTemplateCustomizers(retryTemplate -> retryTemplate.registerListener(new RetryListener() {
@Override
public <T, E extends Throwable> boolean open(RetryContext context, RetryCallback<T, E> callback) {
return false;
}
@Override
public <T, E extends Throwable> void close(RetryContext context, RetryCallback<T, E> callback, Throwable throwable) {
}
@Override
public <T, E extends Throwable> void onError(RetryContext context, RetryCallback<T, E> callback, Throwable throwable) {
}
}));
}
2. 構建
2.1. 基本編譯和測試
要構建原始碼,您需要安裝 JDK 17。
Spring Cloud 使用 Maven 進行大多數構建相關活動,您應該能夠透過克隆您感興趣的專案並輸入以下命令很快上手
$ ./mvnw install
您也可以自行安裝 Maven(>=3.3.3),並在下面的示例中用 mvn 命令代替 ./mvnw。如果您這樣做,並且您的本地 Maven 設定不包含 Spring 預釋出構件的倉庫宣告,您可能還需要新增 -P spring。 |
請注意,您可能需要透過設定 MAVEN_OPTS 環境變數,並將其值設定為 -Xmx512m -XX:MaxPermSize=128m 來增加 Maven 可用的記憶體量。我們嘗試在 .mvn 配置中涵蓋這一點,因此如果您發現必須這樣做才能使構建成功,請提出一個問題,將這些設定新增到原始碼控制中。 |
需要中介軟體(即 Redis)進行測試的專案通常要求安裝並執行本地 [Docker](www.docker.com/get-started) 例項。
2.2. 文件
spring-cloud-build 模組有一個“docs”配置檔案,如果啟用它,它將嘗試從 src/main/asciidoc 構建 asciidoc 源。作為該過程的一部分,它將查詢 README.adoc 並透過載入所有包含來處理它,但不解析或渲染它,只是將其複製到 ${main.basedir}(預設為 $/tmp/releaser-1706275114670-0/spring-cloud-circuitbreaker/docs,即專案的根目錄)。如果 README 中有任何更改,它將在 Maven 構建後顯示為正確位置的修改檔案。只需提交併推送更改。
2.3. 使用程式碼
如果您沒有 IDE 偏好,我們建議您在處理程式碼時使用 Spring Tools Suite 或 Eclipse。我們使用 m2eclipse eclipse 外掛進行 Maven 支援。只要它們使用 Maven 3.3.3 或更高版本,其他 IDE 和工具也應該可以正常工作。
2.3.1. 啟用 Spring Maven 配置
Spring Cloud 專案需要啟用“spring”Maven 配置檔案才能解析 Spring 里程碑和快照倉庫。請使用您首選的 IDE 將此配置檔案設定為活動狀態,否則您可能會遇到構建錯誤。
2.3.2. 使用 m2eclipse 匯入到 eclipse
我們建議在與 eclipse 合作時使用 m2eclipse eclipse 外掛。如果您尚未安裝 m2eclipse,可以從“eclipse marketplace”獲取。
舊版本的 m2e 不支援 Maven 3.3,因此一旦專案匯入 Eclipse,您還需要告訴 m2eclipse 為專案使用正確的配置檔案。如果您看到專案中與 POM 相關的許多不同錯誤,請檢查您的安裝是否最新。如果您無法升級 m2e,請將“spring”配置檔案新增到您的 settings.xml 中。或者,您可以將父 pom 的“spring”配置檔案中的儲存庫設定複製到您的 settings.xml 中。 |
2.3.3. 不使用 m2eclipse 匯入到 eclipse
如果您不想使用 m2eclipse,可以使用以下命令生成 Eclipse 專案元資料:
$ ./mvnw eclipse:eclipse
生成的 Eclipse 專案可以透過從“檔案”選單中選擇“匯入現有專案”來匯入。
3. 貢獻
Spring Cloud 在非限制性的 Apache 2.0 許可證下發布,並遵循非常標準的 Github 開發流程,使用 Github 跟蹤器處理問題並將拉取請求合併到 master。如果您想貢獻哪怕是微不足道的東西,請不要猶豫,但請遵循以下準則。
3.1. 簽署貢獻者許可協議
在接受非平凡補丁或拉取請求之前,我們需要您簽署貢獻者許可協議。簽署貢獻者協議並不授予任何人對主倉庫的提交許可權,但這意味著我們可以接受您的貢獻,並且如果我們接受,您將獲得作者署名。活躍的貢獻者可能會被邀請加入核心團隊,並獲得合併拉取請求的許可權。
3.2. 行為準則
本專案遵循貢獻者盟約 行為準則。透過參與,您應該遵守此準則。請向 [email protected] 報告不可接受的行為。
3.3. 程式碼約定和內務管理
這些對於拉取請求都不是必不可少的,但它們都會有所幫助。它們也可以在原始拉取請求之後但在合併之前新增。
-
使用 Spring Framework 程式碼格式約定。如果您使用 Eclipse,可以使用 Spring Cloud Build 專案中的
eclipse-code-formatter.xml檔案匯入格式化程式設定。如果使用 IntelliJ,可以使用 Eclipse Code Formatter Plugin 匯入相同的檔案。 -
確保所有新的
.java檔案都包含一個簡單的 Javadoc 類註釋,至少包含一個標識您的@author標籤,並且最好至少有一個段落說明該類的用途。 -
將 ASF 許可頭註釋新增到所有新的
.java檔案中(從專案中的現有檔案複製) -
如果您對
.java檔案進行了大量修改(不僅僅是表面上的更改),請將自己新增為@author。 -
新增一些 Javadoc,如果您更改了名稱空間,還要新增一些 XSD 文件元素。
-
一些單元測試也會有很大幫助——總得有人去做。
-
如果您的分支沒有其他人使用,請將其重新基於當前 master(或主專案中的其他目標分支)。
-
編寫提交訊息時請遵循 這些約定,如果您正在修復現有問題,請在提交訊息末尾新增
Fixes gh-XXXX(其中 XXXX 是問題編號)。
3.4. Checkstyle
Spring Cloud Build 附帶一套 Checkstyle 規則。您可以在 spring-cloud-build-tools 模組中找到它們。該模組下最值得注意的檔案是
└── src ├── checkstyle │ └── checkstyle-suppressions.xml (3) └── main └── resources ├── checkstyle-header.txt (2) └── checkstyle.xml (1)
| 1 | 預設 Checkstyle 規則 |
| 2 | 檔案頭設定 |
| 3 | 預設抑制規則 |
3.4.1. Checkstyle 配置
Checkstyle 規則預設停用。要將 Checkstyle 新增到您的專案中,只需定義以下屬性和外掛。
<properties>
<maven-checkstyle-plugin.failsOnError>true</maven-checkstyle-plugin.failsOnError> (1)
<maven-checkstyle-plugin.failsOnViolation>true
</maven-checkstyle-plugin.failsOnViolation> (2)
<maven-checkstyle-plugin.includeTestSourceDirectory>true
</maven-checkstyle-plugin.includeTestSourceDirectory> (3)
</properties>
<build>
<plugins>
<plugin> (4)
<groupId>io.spring.javaformat</groupId>
<artifactId>spring-javaformat-maven-plugin</artifactId>
</plugin>
<plugin> (5)
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId>
</plugin>
</plugins>
<reporting>
<plugins>
<plugin> (5)
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId>
</plugin>
</plugins>
</reporting>
</build>
| 1 | Checkstyle 錯誤時構建失敗 |
| 2 | Checkstyle 違規時構建失敗 |
| 3 | Checkstyle 也會分析測試原始碼 |
| 4 | 新增 Spring Java Format 外掛,該外掛將重新格式化您的程式碼以透過大多數 Checkstyle 格式化規則 |
| 5 | 將 Checkstyle 外掛新增到您的構建和報告階段 |
如果您需要抑制某些規則(例如,行長需要更長),那麼只需在 ${project.root}/src/checkstyle/checkstyle-suppressions.xml 下定義一個包含抑制內容的檔案即可。示例
<?xml version="1.0"?>
<!DOCTYPE suppressions PUBLIC
"-//Puppy Crawl//DTD Suppressions 1.1//EN"
"https://www.puppycrawl.com/dtds/suppressions_1_1.dtd">
<suppressions>
<suppress files=".*ConfigServerApplication\.java" checks="HideUtilityClassConstructor"/>
<suppress files=".*ConfigClientWatch\.java" checks="LineLengthCheck"/>
</suppressions>
建議將 ${spring-cloud-build.rootFolder}/.editorconfig 和 ${spring-cloud-build.rootFolder}/.springformat 複製到您的專案中。這樣,將應用一些預設格式規則。您可以透過執行此指令碼來完成
$ curl https://raw.githubusercontent.com/spring-cloud/spring-cloud-build/master/.editorconfig -o .editorconfig
$ touch .springformat
3.5. IDE 設定
3.5.1. Intellij IDEA
為了設定 Intellij,您應該匯入我們的編碼約定、檢查配置檔案並設定 Checkstyle 外掛。以下檔案可以在 Spring Cloud Build 專案中找到。
└── src ├── checkstyle │ └── checkstyle-suppressions.xml (3) └── main └── resources ├── checkstyle-header.txt (2) ├── checkstyle.xml (1) └── intellij ├── Intellij_Project_Defaults.xml (4) └── Intellij_Spring_Boot_Java_Conventions.xml (5)
| 1 | 預設 Checkstyle 規則 |
| 2 | 檔案頭設定 |
| 3 | 預設抑制規則 |
| 4 | Intellij 的專案預設設定,應用了大部分 Checkstyle 規則 |
| 5 | Intellij 的專案樣式約定,應用了大部分 Checkstyle 規則 |
轉到 File → Settings → Editor → Code style。在那裡點選 Scheme 部分旁邊的圖示。然後,點選 Import Scheme 值並選擇 Intellij IDEA code style XML 選項。匯入 spring-cloud-build-tools/src/main/resources/intellij/Intellij_Spring_Boot_Java_Conventions.xml 檔案。
轉到 File → Settings → Editor → Inspections。在那裡點選 Profile 部分旁邊的圖示。然後,點選 Import Profile 並匯入 spring-cloud-build-tools/src/main/resources/intellij/Intellij_Project_Defaults.xml 檔案。
要使 Intellij 與 Checkstyle 配合使用,您必須安裝 Checkstyle 外掛。建議也安裝 Assertions2Assertj 以自動轉換 JUnit 斷言。
轉到 File → Settings → Other settings → Checkstyle。在那裡點選 Configuration file 部分的 + 圖示。在那裡,您必須定義從何處獲取 Checkstyle 規則。在上面的圖片中,我們從克隆的 Spring Cloud Build 倉庫中選擇了規則。但是,您可以指向 Spring Cloud Build 的 GitHub 倉庫(例如,對於 checkstyle.xml:raw.githubusercontent.com/spring-cloud/spring-cloud-build/master/spring-cloud-build-tools/src/main/resources/checkstyle.xml)。我們需要提供以下變數
-
checkstyle.header.file- 請將其指向 Spring Cloud Build 的spring-cloud-build-tools/src/main/resources/checkstyle-header.txt檔案,無論是在您的克隆倉庫中還是透過raw.githubusercontent.com/spring-cloud/spring-cloud-build/master/spring-cloud-build-tools/src/main/resources/checkstyle-header.txtURL。 -
checkstyle.suppressions.file- 預設抑制。請將其指向 Spring Cloud Build 的spring-cloud-build-tools/src/checkstyle/checkstyle-suppressions.xml檔案,無論是在您的克隆倉庫中還是透過raw.githubusercontent.com/spring-cloud/spring-cloud-build/master/spring-cloud-build-tools/src/checkstyle/checkstyle-suppressions.xmlURL。 -
checkstyle.additional.suppressions.file- 此變數對應於您本地專案中的抑制。例如,您正在處理spring-cloud-contract。然後指向project-root/src/checkstyle/checkstyle-suppressions.xml資料夾。spring-cloud-contract的示例為:/home/username/spring-cloud-contract/src/checkstyle/checkstyle-suppressions.xml。
請記住將 Scan Scope 設定為 All sources,因為我們將 Checkstyle 規則應用於生產和測試原始碼。 |
3.6. 重複查詢器
Spring Cloud Build 帶來了 basepom:duplicate-finder-maven-plugin,它能夠標記 Java 類路徑上的重複和衝突的類和資源。
3.6.1. 重複查詢器配置
重複查詢器預設啟用,將在 Maven 構建的 verify 階段執行,但只有當您將 duplicate-finder-maven-plugin 新增到專案的 pom.xml 的 build 部分時,它才會在您的專案中生效。
<build>
<plugins>
<plugin>
<groupId>org.basepom.maven</groupId>
<artifactId>duplicate-finder-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
對於其他屬性,我們已按照外掛文件中列出的預設值進行設定。
您可以透過設定所選屬性的值並加上 duplicate-finder-maven-plugin 字首來輕鬆覆蓋它們。例如,將 duplicate-finder-maven-plugin.skip 設定為 true 以跳過構建中的重複檢查。
如果您需要在設定中新增 ignoredClassPatterns 或 ignoredResourcePatterns,請務必將它們新增到專案的外掛配置部分。
<build>
<plugins>
<plugin>
<groupId>org.basepom.maven</groupId>
<artifactId>duplicate-finder-maven-plugin</artifactId>
<configuration>
<ignoredClassPatterns>
<ignoredClassPattern>org.joda.time.base.BaseDateTime</ignoredClassPattern>
<ignoredClassPattern>.*module-info</ignoredClassPattern>
</ignoredClassPatterns>
<ignoredResourcePatterns>
<ignoredResourcePattern>changelog.txt</ignoredResourcePattern>
</ignoredResourcePatterns>
</configuration>
</plugin>
</plugins>
</build>