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 會傳入一個 Resilience4JCircuitBreakerFactoryReactiveResilience4JCircuitBreakerFactory。可以使用 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 會傳入一個 Resilience4JCircuitBreakerFactoryReactiveResilience4JCircuitBreakerFactory

@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. 斷路器屬性配置

您可以在應用程式的配置檔案中配置 CircuitBreakerTimeLimiter 配置或例項。屬性配置的優先順序高於 Java Customizer 配置。

優先順序從高到低排列如下:

  • 方法(id) 配置 - 針對特定方法或操作

  • 服務(group) 配置 - 針對特定應用程式服務或操作

  • 全域性預設配置

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
Configs 屬性配置
resilience4j.circuitbreaker:
    configs:
        groupA:
            registerHealthIndicator: true
            slidingWindowSize: 200

resilience4j.timelimiter:
    configs:
        groupC:
            timeoutDuration: 3s
            cancelRunningFuture: true
Instances 屬性配置
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. 支援 Bulkhead(艙壁)模式

如果 classpath 中存在 resilience4j-bulkhead,Spring Cloud CircuitBreaker 將使用 Resilience4j Bulkhead 包裝所有方法。您可以透過將 spring.cloud.circuitbreaker.bulkhead.resilience4j.enabled 設定為 false 來停用 Resilience4j Bulkhead。

Spring Cloud CircuitBreaker Resilience4j 提供了兩種 Bulkhead 模式的實現

  • 一個使用訊號量的 SemaphoreBulkhead

  • 一個使用有界佇列和固定執行緒池的 FixedThreadPoolBulkhead

預設情況下,Spring Cloud CircuitBreaker Resilience4j 使用 FixedThreadPoolBulkhead。要修改預設行為以使用 SemaphoreBulkhead,請將屬性 spring.cloud.circuitbreaker.resilience4j.enableSemaphoreDefaultBulkhead 設定為 true

有關 Bulkhead 模式實現的更多資訊,請參閱 Resilience4j Bulkhead

可以使用 Customizer<Resilience4jBulkheadProvider> 來提供預設的 BulkheadThreadPoolBulkhead 配置。

@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 配置

與提供預設的 '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");
}

除了配置建立的 Bulkhead 之外,您還可以在 Bulkhead 和執行緒池 Bulkhead 建立後、返回給呼叫者之前對其進行自定義。為此,您可以使用 addBulkheadCustomizeraddThreadPoolBulkheadCustomizer 方法。

Bulkhead 示例
@Bean
public Customizer<Resilience4jBulkheadProvider> customizer() {
    return provider -> provider.addBulkheadCustomizer(bulkhead -> bulkhead.getEventPublisher()
        .onCallRejected(slowRejectedConsumer)
        .onCallFinished(slowFinishedConsumer), "slowBulkhead");
}
執行緒池 Bulkhead 示例
@Bean
public Customizer<Resilience4jBulkheadProvider> slowThreadPoolBulkheadCustomizer() {
    return provider -> provider.addThreadPoolBulkheadCustomizer(threadPoolBulkhead -> threadPoolBulkhead.getEventPublisher()
        .onCallRejected(slowThreadPoolRejectedConsumer)
        .onCallFinished(slowThreadPoolFinishedConsumer), "slowThreadPoolBulkhead");
}

1.1.8. Bulkhead 屬性配置

您可以在應用程式的配置檔案中配置 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. 收集指標

只要 classpath 中包含正確的依賴項,Spring Cloud Circuit Breaker Resilience4j 就包含用於設定指標收集的自動配置。要啟用指標收集,您必須包含 org.springframework.boot:spring-boot-starter-actuatorio.github.resilience4j:resilience4j-micrometer。有關存在這些依賴項時生成的指標的更多資訊,請參閱 Resilience4j 文件

您無需直接包含 micrometer-core,因為它由 spring-boot-starter-actuator 引入

1.2. 配置 Spring Retry 斷路器

Spring Retry 為 Spring 應用提供宣告性重試支援。該專案的一部分包括實現斷路器功能的能力。Spring Retry 透過結合其 CircuitBreakerRetryPolicy狀態化重試 來提供斷路器實現。使用 Spring Retry 建立的所有斷路器都將使用 CircuitBreakerRetryPolicyDefaultRetryState 建立。這兩個類都可以使用 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 環境變數來增加 Maven 可用的記憶體量,其值類似於 -Xmx512m -XX:MaxPermSize=128m。我們嘗試在 .mvn 配置中涵蓋這一點,因此如果您發現必須這樣做才能使構建成功,請提交工單以將設定新增到原始碼控制中。

需要中介軟體(即 Redis)進行測試的專案通常要求安裝並執行本地 [Docker](www.docker.com/get-started) 例項。

2.2. 文件

spring-cloud-build 模組有一個“docs”profile,如果您開啟它,它會嘗試從 src/main/asciidoc 構建 asciidoc 源。作為該過程的一部分,它會查詢 README.adoc 並透過載入所有 include 來處理它,但不解析或渲染它,只是將其複製到 ${main.basedir}(預設為 $/tmp/releaser-1706275114670-0/spring-cloud-circuitbreaker/docs,即專案的根目錄)。如果 README 中有任何更改,它會在 Maven 構建後顯示為正確位置的修改檔案。只需提交併推送更改即可。

2.3. 使用程式碼

如果您沒有 IDE 偏好,我們建議您在使用程式碼時使用 Spring Tools SuiteEclipse。我們使用 m2eclipse Eclipse 外掛進行 Maven 支援。其他 IDE 和工具也應能正常工作,只要它們使用 Maven 3.3.3 或更高版本。

2.3.1. 啟用 Spring Maven Profile

Spring Cloud 專案需要啟用 'spring' Maven Profile 才能解析 Spring 里程碑和快照倉庫。請使用您首選的 IDE 將此 profile 設定為活動狀態,否則可能會遇到構建錯誤。

2.3.2. 使用 m2eclipse 匯入到 Eclipse

我們建議在 Eclipse 中使用 m2eclipse 外掛。如果您尚未安裝 m2eclipse,可以從“eclipse marketplace”獲取。

較舊版本的 m2e 不支援 Maven 3.3,因此一旦專案匯入 Eclipse,您還需要告訴 m2eclipse 使用正確的 profile。如果您看到許多與專案 POM 相關的不同錯誤,請檢查您是否安裝了最新版本。如果您無法升級 m2e,請將“spring”profile 新增到您的 settings.xml 中。或者,您可以將父 pom 的“spring”profile 中的倉庫設定複製到您的 settings.xml 中。

2.3.3. 不使用 m2eclipse 匯入到 Eclipse

如果您 prefer 不使用 m2eclipse,可以使用以下命令生成 Eclipse 專案元資料:

$ ./mvnw eclipse:eclipse

生成的 Eclipse 專案可以透過從 file 選單中選擇 import existing projects 來匯入。

3. 貢獻

Spring Cloud 以非限制性的 Apache 2.0 許可釋出,並遵循非常標準的 Github 開發流程,使用 Github tracker 處理問題並將 pull request 合併到 master 分支。如果您想貢獻哪怕是微不足道的東西,請不要猶豫,但要遵循以下指南。

3.1. 簽署貢獻者許可協議

在我們接受非微不足道的補丁或 pull request 之前,我們需要您簽署 貢獻者許可協議。簽署貢獻者協議並不會賦予任何人對主倉庫的提交許可權,但這確實意味著我們可以接受您的貢獻,並且如果我們接受了,您將獲得作者署名。活躍的貢獻者可能會被邀請加入核心團隊,並獲得合併 pull request 的許可權。

3.2. 行為準則

本專案遵守貢獻者公約 行為準則。參與本專案,即表示您同意遵守此準則。請向 [email protected] 報告不可接受的行為。

3.3. 程式碼規範和整理

這些對於 pull request 來說都不是必需的,但它們都會有所幫助。它們也可以在最初的 pull request 之後但在合併之前新增。

  • 使用 Spring Framework 程式碼格式規範。如果您使用 Eclipse,可以使用 Spring Cloud Build 專案中的 eclipse-code-formatter.xml 檔案匯入格式化設定。如果使用 IntelliJ,可以使用 Eclipse Code Formatter Plugin 匯入相同的檔案。

  • 確保所有新的 .java 檔案都有一個簡單的 Javadoc 類註釋,至少包含一個標識您身份的 @author 標籤,最好至少有一段關於該類用途的描述。

  • 將 ASF 許可頭註釋新增到所有新的 .java 檔案中(從專案中現有檔案複製)

  • 將您自己新增為對您進行了實質性修改(不僅僅是外觀更改)的 .java 檔案的 @author

  • 新增一些 Javadocs,如果您更改了名稱空間,還要新增一些 XSD 文件元素。

  • 一些單元測試也會有很大幫助——總得有人做。

  • 如果沒有其他人使用您的分支,請將其 rebase 到當前的 master(或主專案中的其他目標分支)。

  • 編寫提交訊息時請遵循 這些約定,如果您正在修復現有問題,請在提交訊息末尾新增 Fixes gh-XXXX(其中 XXXX 是問題編號)。

3.4. Checkstyle

Spring Cloud Build 附帶一套 Checkstyle 規則。您可以在 spring-cloud-build-tools 模組中找到它們。該模組下最值得注意的檔案有:

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 新增到您的專案中,只需定義以下屬性和外掛即可。

pom.xml
<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 下定義一個包含您的抑制的檔案即可。示例:

projectRoot/src/checkstyle/checkstyle-suppresions.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,您應該匯入我們的編碼規範、檢查 profile 並設定 checkstyle 外掛。以下檔案可在 Spring Cloud Build 專案中找到。

spring-cloud-build-tools/
└── 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 規則
Code style
圖 1. 程式碼樣式

轉到 FileSettingsEditorCode style。點選 Scheme 部分旁邊的圖示。在那裡,點選 Import Scheme 值並選擇 Intellij IDEA code style XML 選項。匯入 spring-cloud-build-tools/src/main/resources/intellij/Intellij_Spring_Boot_Java_Conventions.xml 檔案。

Code style
圖 2. 檢查 profiles

轉到 FileSettingsEditorInspections。點選 Profile 部分旁邊的圖示。在那裡,點選 Import Profile 並匯入 spring-cloud-build-tools/src/main/resources/intellij/Intellij_Project_Defaults.xml 檔案。

Checkstyle

要使 Intellij 使用 Checkstyle,您必須安裝 Checkstyle 外掛。建議也安裝 Assertions2Assertj 以自動轉換 JUnit 斷言。

Checkstyle

轉到 FileSettingsOther settingsCheckstyle。點選 Configuration file 部分中的 + 圖示。在那裡,您需要定義 Checkstyle 規則應該從哪裡獲取。在上圖中,我們從克隆的 Spring Cloud Build 倉庫中選擇了規則。但是,您可以指向 Spring Cloud Build 的 GitHub 倉庫(例如,對於 checkstyle.xmlraw.githubusercontent.com/spring-cloud/spring-cloud-build/master/spring-cloud-build-tools/src/main/resources/checkstyle.xml)。我們需要提供以下變數:

請記住將 Scan Scope 設定為 All sources,因為我們將 Checkstyle 規則應用於生產和測試源。

3.6. Duplicate Finder

Spring Cloud Build 引入了 basepom:duplicate-finder-maven-plugin,該外掛可以在 Java classpath 上標記重複和衝突的類及資源。

3.6.1. Duplicate Finder 配置

Duplicate finder 預設啟用,並將在 Maven 構建的 verify 階段執行,但只有將 duplicate-finder-maven-plugin 新增到專案 pom.xmlbuild 部分,它才會在您的專案中生效。

pom.xml
<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 以在您的構建中跳過重複檢查。

如果您需要在設定中新增 ignoredClassPatternsignoredResourcePatterns,請確保將它們新增到專案外掛配置部分:

<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>