Dokka Gradle 구성 옵션

Dokka Gradle 구성 옵션 (Dokka Gradle configuration options)

Dokka에는 나와 독자의 경험을 맞춤 설정할 수 있는 구성 옵션이 많아요.

아래에는 각 구성 섹션에 대한 상세 설명과 몇 가지 예시가 있어요. 모든 구성 옵션을 적용한 예시도 찾아볼 수 있어요.

단일 프로젝트 및 멀티 프로젝트 빌드에 구성 블록을 적용하는 방법에 대한 자세한 내용은 Configuration 예시를 참고하세요.

출처: Dokka Gradle configuration options

본문

일반 구성 (General configuration)

Dokka Gradle 플러그인의 일반 구성 예시예요.

  • 최상위 dokka {} DSL 구성을 사용해요.
  • DGP에서는 dokkaPublications{} 블록에 Dokka 발행(publish) 구성을 선언해요.
  • 기본 발행은 htmlhtmljavadocjavadoc이에요.
  • build.gradle.kts 파일의 문법은 Gradle의 Kotlin DSL이 타입 안전 접근자(type-safe accessor)를 사용하기 때문에 일반 .kt 파일(예: Kotlin 커스텀 플러그인용)과 달라요.
plugins {
    id("org.jetbrains.dokka") version "2.2.0"
}

dokka {
    dokkaPublications.html {
        moduleName.set(project.name)
        moduleVersion.set(project.version.toString())
        // Standard output directory for HTML documentation
        outputDirectory.set(layout.buildDirectory.dir("dokka/html"))
        failOnWarning.set(false)
        suppressInheritedMembers.set(false)
        suppressObviousFunctions.set(true)
        offlineMode.set(false)
        includes.from("packages.md", "extra.md")

        // Output directory for additional files
        // Use this block instead of the standard when you
        // want to change the output directory and include extra files
        outputDirectory.set(rootDir.resolve("docs/api/0.x"))

        // Use fileTree to add multiple files
        includes.from(
            fileTree("docs") {
                include("**/*.md")
            }
        )
    }
}

파일 다루기에 대한 자세한 내용은 Gradle 문서를 참고하세요.

// CustomPlugin.kt

import org.gradle.api.Plugin
import org.gradle.api.Project
import org.jetbrains.dokka.gradle.DokkaExtension

abstract class CustomPlugin : Plugin<Project> {
    override fun apply(project: Project) {
        project.plugins.apply("org.jetbrains.dokka")

        project.extensions.configure(DokkaExtension::class.java) { dokka ->

            dokka.moduleName.set(project.name)
            dokka.moduleVersion.set(project.version.toString())

            dokka.dokkaPublications.named("html") { publication ->
                // Standard output directory for HTML documentation
                publication.outputDirectory.set(project.layout.buildDirectory.dir("dokka/html"))
                publication.failOnWarning.set(true)
                publication.suppressInheritedMembers.set(true)
                publication.offlineMode.set(false)
                publication.suppressObviousFunctions.set(true)
                publication.includes.from("packages.md", "extra.md")

                // Output directory for additional files
                // Use this instead of the standard block when you
                // want to change the output directory and include extra files
                html.outputDirectory.set(project.rootDir.resolve("docs/api/0.x"))
            }
        }
    }
}
plugins {
    id 'org.jetbrains.dokka' version '2.2.0'
}

dokka {
    dokkaPublications {
        html {
            // Sets general module information
            moduleName.set(project.name)
            moduleVersion.set(project.version.toString())

            // Standard output directory for HTML documentation
            outputDirectory.set(layout.buildDirectory.dir("dokka/html"))

            // Core Dokka options
            failOnWarning.set(false)
            suppressInheritedMembers.set(false)
            suppressObviousFunctions.set(true)
            offlineMode.set(false)
            includes.from(files("packages.md", "extra.md"))

            // Output directory for additional files
            // Use this block instead of the standard when you want to
            // change the output directory and include extra files
            outputDirectory.set(file("$rootDir/docs/api/0.x"))
        }
    }
}

moduleName — 프로젝트 문서의 표시 이름이에요. 목차, 내비게이션, 헤더, 로그 메시지에 나타나요. 멀티 프로젝트 빌드에서는 각 하위 프로젝트의 moduleName이 집계된 문서에서 해당 섹션 제목으로 사용돼요.

기본값: Gradle 프로젝트 이름

moduleVersion — 생성된 문서에 표시되는 하위 프로젝트 버전이에요. 단일 프로젝트 빌드에서는 프로젝트 버전으로 사용돼요. 멀티 프로젝트 빌드에서는 문서를 집계할 때 각 하위 프로젝트의 moduleVersion이 사용돼요.

기본값: Gradle 프로젝트 버전

outputDirectory — 생성된 문서가 저장되는 디렉터리예요. 이 설정은 dokkaGenerate 태스크가 생성하는 모든 문서 형식(HTML, Javadoc 등)에 적용돼요.

기본값: build/dokka/html

추가 파일의 출력 디렉터리 (Output directory for additional files)

단일 및 멀티 프로젝트 빌드 모두에서 출력 디렉터리를 지정하고 추가 파일을 포함할 수 있어요. 멀티 프로젝트 빌드에서는 루트 프로젝트의 구성에서 출력 디렉터리를 설정하고 추가 파일을 포함해요.

failOnWarning — 문서 생성 중 경고가 발생했을 때 Dokka가 빌드를 실패시킬지 여부예요. 프로세스는 먼저 모든 오류와 경고가 출력될 때까지 기다려요. 이 설정은 reportUndocumented와 잘 어울려요.

기본값: false

suppressInheritedMembers — 주어진 클래스에서 명시적으로 오버라이드되지 않은 상속된 멤버를 숨길지 여부예요. 참고: 이 옵션은 equals, hashCode, toString 같은 함수는 숨기지만, dataClass.componentN이나 dataClass.copy 같은 합성 함수는 숨기지 않아요. 그런 함수는 suppressObviousFunctions를 사용하세요.

기본값: false

suppressObviousFunctions — 명백한 함수를 숨길지 여부예요. 다음에 해당하면 함수가 명백한 것으로 간주돼요.

  • kotlin.Any, Kotlin.Enum, java.lang.Object 또는 java.lang.Enum에서 상속된 함수(예: equals, hashCode, toString).
  • 컴파일러가 만든 합성(synthetic) 함수로 문서가 없는 것(예: dataClass.componentN 또는 dataClass.copy).

기본값: true

offlineMode — 네트워크로 원격 파일과 링크를 조회할지 여부예요. 여기에는 외부 문서에 대한 링크를 생성하는 데 쓰는 package-list가 포함돼요. 예를 들어 표준 라이브러리의 클래스를 문서에서 클릭 가능하게 만들 수 있죠. 이 값을 true로 설정하면 특정 경우에 빌드 시간을 크게 단축할 수 있지만, 표준 라이브러리를 포함한 의존성에서 나온 클래스/멤버 링크를 조회하지 않게 되어 사용자 경험이 나빠질 수 있어요.

참고: 가져온 파일을 로컬에 캐시해서 Dokka에 로컬 경로로 제공할 수 있어요. externalDocumentationLinksexternalDocumentationLinks 섹션을 참고하세요.

기본값: false

includes하위 프로젝트 및 패키지 문서가 들어 있는 Markdown 파일 목록이에요. Markdown 파일은 필요한 형식과 일치해야 해요. 지정된 파일의 내용은 파싱되어 하위 프로젝트 및 패키지 설명으로 문서에 포함돼요.

예시와 사용 방법은 Dokka Gradle 예시를 참고하세요.

Source set 구성 (Source set configuration)

Dokka는 Kotlin source set에 대해 일부 옵션을 구성할 수 있게 해줘요.

import org.jetbrains.dokka.gradle.engine.parameters.VisibilityModifier

dokka {
    // ..
    // General configuration section
    // ..

    // Source sets configuration
    dokkaSourceSets {
        // Example: Configuration exclusive to the 'linux' source set
        named("linux") {
            dependentSourceSets{named("native")}
            sourceRoots.from(file("linux/src"))
        }

        configureEach {
            suppress.set(false)
            displayName.set(name)
            documentedVisibilities.set(setOf(VisibilityModifier.Public)) // OR documentedVisibilities(VisibilityModifier.Public)
            reportUndocumented.set(false)
            skipEmptyPackages.set(true)
            skipDeprecated.set(false)
            suppressGeneratedFiles.set(true)
            jdkVersion.set(8)
            languageVersion.set("1.7")
            apiVersion.set("1.7")
            sourceRoots.from(file("src"))
            classpath.from(file("libs/dependency.jar"))
            samples.from("samples/Basic.kt", "samples/Advanced.kt")

            sourceLink {
                // Source link section
            }
            perPackageOption {
                // Package options section
            }
            externalDocumentationLinks {
                // External documentation links section
            }
        }
    }
}
import org.jetbrains.dokka.gradle.engine.parameters.VisibilityModifier

dokka {
    // ..
    // General configuration section
    // ..

    dokkaSourceSets {
        // Example: Configuration exclusive to the 'linux' source set
        named("linux") {
            dependentSourceSets { named("native") }
            sourceRoots.from(file("linux/src"))
        }

        configureEach {
            suppress.set(false)
            displayName.set(name)
            documentedVisibilities.set([VisibilityModifier.Public] as Set) // OR documentedVisibilities(VisibilityModifier.Public)
            reportUndocumented.set(false)
            skipEmptyPackages.set(true)
            skipDeprecated.set(false)
            suppressGeneratedFiles.set(true)
            jdkVersion.set(8)
            languageVersion.set("1.7")
            apiVersion.set("1.7")
            sourceRoots.from(file("src"))
            classpath.from(file("libs/dependency.jar"))
            samples.from("samples/Basic.kt", "samples/Advanced.kt")

            sourceLink {
                // Source link section
            }
            perPackageOption {
                // Package options section
            }
            externalDocumentationLinks {
                // External documentation links section
            }
        }
    }
}

suppress — 문서 생성 시 이 source set을 건너뛸지 여부예요.

기본값: false

displayName — 이 source set을 가리키는 표시 이름이에요. 이 이름은 외부적으로(예: 문서 독자에게 보이는 source set 이름) 그리고 내부적으로(예: reportUndocumented의 로깅 메시지) 모두 사용돼요. 기본적으로 이 값은 Kotlin Gradle 플러그인이 제공하는 정보에서 추론돼요.

documentedVisibilities — Dokka가 생성된 문서에 포함해야 하는 가시성 수정자를 정의해요. protected, internal, private 선언을 문서화하고 싶거나, public 선언을 제외하고 내부 API만 문서화하고 싶을 때 사용해요. 추가로 Dokka의 documentedVisibilities()documentedVisibilities() 함수를 사용해 문서화할 가시성을 추가할 수도 있어요. 이 설정은 각 패키지별로 구성할 수 있어요.

기본값: VisibilityModifier.Public

reportUndocumenteddocumentedVisibilities와 다른 필터를 적용한 뒤에도 보이는, 즉 KDoc이 없는 문서화되지 않은 선언에 대한 경고를 낼지 여부예요. 이 설정은 failOnWarning과 잘 어울려요. 각 패키지별로 구성할 수 있어요.

기본값: false

skipEmptyPackages — 각종 필터를 적용한 뒤에도 보이는 선언이 없는 패키지를 건너뛸지 여부예요. 예를 들어 skipDeprecatedtrue로 설정되어 있고 패키지에 deprecated 선언만 있다면, 그 패키지는 비어 있는 것으로 간주돼요.

기본값: true

skipDeprecated@Deprecated로 어노테이션된 선언을 문서화할지 여부예요. 각 패키지별로 구성할 수 있어요.

기본값: false

suppressGeneratedFiles — 생성된 파일을 문서화할지 여부예요. 생성된 파일은 {project}/{buildDir}/generated 디렉터리 아래에 있을 것으로 예상돼요. true로 설정하면 그 디렉터리의 모든 파일이 사실상 suppressedFiles 옵션에 추가되므로, 수동으로 구성할 수 있어요.

기본값: true

suppressAnnotatedWith — 특정 어노테이션으로 표시된 선언을 숨기기 위한 어노테이션 FQN(완전한 이름) 집합이에요. 이 중 하나의 어노테이션으로 표시된 선언은 생성된 문서에서 제외돼요.

jdkVersion — Java 타입용 외부 문서 링크를 생성할 때 쓸 JDK 버전이에요. 예를 들어 어떤 공개 선언 시그니처에서 java.util.UUID를 사용하고 이 옵션이 8로 설정되어 있다면, Dokka는 그 타입에 대해 JDK 8 Javadocs로의 외부 문서 링크를 생성해요.

기본값: 8

languageVersion — 분석 및 @sample 환경을 설정하는 데 쓰는 Kotlin 언어 버전이에요. 기본적으로 Dokka에 내장된 컴파일러가 사용할 수 있는 최신 언어 버전이 사용돼요.

apiVersion — 분석 및 @sample 환경을 설정하는 데 쓰는 Kotlin API 버전이에요. 기본적으로 languageVersion에서 추론돼요.

sourceRoots — 분석하고 문서화할 소스코드 루트예요. 디렉터리와 개별 .kt.java 파일을 입력으로 받아요. 기본적으로 source root는 Kotlin Gradle 플러그인이 제공하는 정보에서 추론돼요.

classpath — 분석 및 인터랙티브 샘플용 클래스패스예요. 의존성에서 온 일부 타입이 자동으로 해석/포착되지 않을 때 유용해요. 이 옵션은 .jar.klib 파일을 모두 받아요. 기본적으로 클래스패스는 Kotlin Gradle 플러그인이 제공하는 정보에서 추론돼요.

samples@sample KDoc 태그로 참조되는 샘플 함수가 들어 있는 디렉터리 또는 파일 목록이에요.

독자들이 원격 저장소에 있는 각 선언의 소스를 찾을 수 있도록 source link를 구성해요. 이 구성에는 dokkaSourceSets.main {} 블록을 사용해요.

sourceLinks {} 구성 블록을 사용하면 각 시그니처에, 특정 줄 번호가 붙은 remoteUrl로 이어지는 source 링크를 추가할 수 있어요. 줄 번호는 remoteLineSuffix를 설정해 구성할 수 있어요.

예시는 kotlinx.coroutinescount()count() 함수 문서를 참고하세요.

build.gradle.kts 파일의 문법은 Gradle의 Kotlin DSL이 타입 안전 접근자를 사용하기 때문에 일반 .kt 파일(예: 커스텀 Gradle 플러그인용)과 달라요.

// build.gradle.kts

dokka {
    dokkaSourceSets.main {
        sourceLink {
            localDirectory.set(file("src/main/kotlin"))
            remoteUrl("https://github.com/your-repo")
            remoteLineSuffix.set("#L")
        }
    }
}
// CustomPlugin.kt

import org.gradle.api.Plugin
import org.gradle.api.Project
import org.jetbrains.dokka.gradle.DokkaExtension

abstract class CustomPlugin : Plugin<Project> {
    override fun apply(project: Project) {
        project.plugins.apply("org.jetbrains.dokka")
        project.extensions.configure(DokkaExtension::class.java) { dokka ->
            dokka.dokkaSourceSets.named("main") { dss ->
                dss.includes.from("README.md")
                dss.sourceLink {
                    it.localDirectory.set(project.file("src/main/kotlin"))
                    it.remoteUrl("https://example.com/src")
                    it.remoteLineSuffix.set("#L")
                }
            }
        }
    }
}
dokka {
    dokkaSourceSets {
        main {
            sourceLink {
                localDirectory.set(file("src/main/kotlin"))
                remoteUrl.set(new URI("https://github.com/your-repo"))
                remoteLineSuffix.set("#L")
            }
        }
    }
}

localDirectory — 로컬 소스 디렉터리의 경로예요. 이 경로는 현재 프로젝트의 루트에 상대적이어야 해요.

remoteUrl — 문서 독자가 접근할 수 있는 소스코드 호스팅 서비스(예: GitHub, GitLab, Bitbucket 또는 소스 파일에 대해 안정적인 URL을 제공하는 어떤 호스팅 서비스든)의 URL이에요. 이 URL은 선언들의 소스코드 링크를 생성하는 데 사용돼요.

remoteLineSuffix — URL에 소스코드 줄 번호를 덧붙일 때 쓰는 접미사예요. 독자가 파일뿐 아니라 선언의 특정 줄 번호로도 이동할 수 있게 해줘요. 숫자 자체는 지정된 접미사 뒤에 붙어요. 예를 들어 이 옵션이 #L로 설정되고 줄 번호가 10이라면, 결과 URL 접미사는 #L10이 돼요.

인기 서비스에서 쓰는 접미사:

  • GitHub: #L

  • GitLab: #L

  • Bitbucket: #lines-

기본값: #L

패키지 옵션 (Package options)

perPackageOption 구성 블록을 사용하면 matchingRegex와 일치하는 특정 패키지에 대한 옵션을 설정할 수 있어요.

import org.jetbrains.dokka.gradle.engine.parameters.VisibilityModifier

dokka {
    dokkaPublications.html {
        dokkaSourceSets.configureEach {
            perPackageOption {
                matchingRegex.set(".*api.*")
                suppress.set(false)
                skipDeprecated.set(false)
                reportUndocumented.set(false)
                documentedVisibilities.set(setOf(VisibilityModifier.Public)) // OR documentedVisibilities(VisibilityModifier.Public)
            }
        }
    }
}
import org.jetbrains.dokka.gradle.engine.parameters.VisibilityModifier

dokka {
    dokkaPublications {
        html {
            dokkaSourceSets.configureEach {
                perPackageOption {
                    matchingRegex.set(".*api.*")
                    suppress.set(false)
                    skipDeprecated.set(false)
                    reportUndocumented.set(false)
                    documentedVisibilities.set([VisibilityModifier.Public] as Set)
                }
            }
        }
    }
}

matchingRegex — 패키지를 일치시키는 데 쓰는 정규 표현식이에요.

기본값: .*

suppress — 문서 생성 시 이 패키지를 건너뛸지 여부예요.

기본값: false

skipDeprecated@Deprecated로 어노테이션된 선언을 문서화할지 여부예요. source set 수준에서 구성할 수 있어요.

기본값: false

reportUndocumenteddocumentedVisibilities와 다른 필터를 적용한 뒤에도 보이는, 즉 KDoc이 없는 문서화되지 않은 선언에 대한 경고를 낼지 여부예요. 이 설정은 failOnWarning과 잘 어울려요. source set 수준에서 구성할 수 있어요.

기본값: false

documentedVisibilities — Dokka가 생성된 문서에 포함해야 하는 가시성 수정자를 정의해요. 이 패키지 안의 protected, internal, private 선언을 문서화하고 싶거나, public 선언을 제외하고 내부 API만 문서화하고 싶을 때 사용해요. 추가로 Dokka의 documentedVisibilities()documentedVisibilities() 함수를 사용해 문서화할 가시성을 추가할 수도 있어요. source set 수준에서 구성할 수 있어요.

기본값: VisibilityModifier.Public

externalDocumentationLinks {} 블록을 사용하면 의존성의 외부 호스팅 문서로 이어지는 링크를 만들 수 있어요.

예를 들어 kotlinx.serialization에서 타입을 사용한다면, 기본적으로 그 타입들은 문서에서 클릭할 수 없어요. 마치 해석되지 않은 것처럼 보이죠. 그런데 kotlinx.serialization의 API 참조 문서는 Dokka로 만들어져 kotlinlang.org에 게시되기 때문에, 이에 대한 외부 문서 링크를 구성할 수 있어요. 그러면 Dokka가 그 라이브러리의 타입에 대한 링크를 생성해서, 링크가 성공적으로 해석되고 클릭 가능해져요.

기본적으로 Kotlin 표준 라이브러리, JDK, Android SDK, AndroidX에 대한 외부 문서 링크가 구성돼 있어요.

register() 메서드로 각 링크를 정의해서 외부 문서 링크를 등록해요. externalDocumentationLinks API는 Gradle DSL 규칙에 맞춰 이 메서드를 사용해요.

dokka {
    dokkaSourceSets.configureEach {
        externalDocumentationLinks.register("example-docs") {
            url("https://example.com/docs/")
            packageListUrl("https://example.com/docs/package-list")
        }
    }
}
dokka {
    dokkaSourceSets.configureEach {
        externalDocumentationLinks.register("example-docs") {
            url.set(new URI("https://example.com/docs/"))
            packageListUrl.set(new URI("https://example.com/docs/package-list"))
        }
    }
}

url — 링크할 문서의 루트 URL이에요. 반드시 끝에 슬래시(/)가 있어야 해요. Dokka는 주어진 URL에 대해 package-list를 자동으로 찾고 선언들을 함께 연결하기 위해 최선을 다해요. 자동 해석이 실패하거나 로컬에 캐시된 파일을 사용하고 싶다면 packageListUrl 옵션을 설정하는 것을 고려해 보세요.

packageListUrlpackage-list의 정확한 위치예요. Dokka가 자동으로 해석하도록 맡기는 대신 사용할 수 있는 대안이에요. Package list에는 하위 프로젝트와 패키지 이름 같은 문서 및 프로젝트 자체에 대한 정보가 들어 있어요. 네트워크 호출을 피하려면 로컬에 캐시된 파일일 수도 있어요.

전체 구성 (Complete configuration)

아래에서 모든 구성 옵션을 한꺼번에 적용한 예시를 볼 수 있어요.

import org.jetbrains.dokka.gradle.engine.parameters.VisibilityModifier

plugins {
    id("org.jetbrains.dokka") version "2.2.0"
}

dokka {
    dokkaPublications.html {
        moduleName.set(project.name)
        moduleVersion.set(project.version.toString())
        outputDirectory.set(layout.buildDirectory.dir("dokka/html"))
        failOnWarning.set(false)
        suppressInheritedMembers.set(false)
        suppressObviousFunctions.set(true)
        offlineMode.set(false)
        includes.from("packages.md", "extra.md")
   }

    dokkaSourceSets {
        // Example: Configuration exclusive to the 'linux' source set
        named("linux") {
            dependentSourceSets{named("native")}
            sourceRoots.from(file("linux/src"))
        }

        configureEach {
            suppress.set(false)
            displayName.set(name)
            documentedVisibilities.set(setOf(VisibilityModifier.Public)) // OR documentedVisibilities(VisibilityModifier.Public)
            reportUndocumented.set(false)
            skipEmptyPackages.set(true)
            skipDeprecated.set(false)
            suppressGeneratedFiles.set(true)
            jdkVersion.set(8)
            languageVersion.set("1.7")
            apiVersion.set("1.7")
            sourceRoots.from(file("src"))
            classpath.from(file("libs/dependency.jar"))
            samples.from("samples/Basic.kt", "samples/Advanced.kt")

            sourceLink {
                localDirectory.set(file("src/main/kotlin"))
                remoteUrl("https://example.com/src")
                remoteLineSuffix.set("#L")
            }

            externalDocumentationLinks {
                url = URL("https://example.com/docs/")
                packageListUrl = File("/path/to/package-list").toURI().toURL()
            }

            perPackageOption {
                matchingRegex.set(".*api.*")
                suppress.set(false)
                skipDeprecated.set(false)
                reportUndocumented.set(false)
                documentedVisibilities.set(
                    setOf(
                        VisibilityModifier.Public,
                        VisibilityModifier.Private,
                        VisibilityModifier.Protected,
                        VisibilityModifier.Internal,
                        VisibilityModifier.Package
                    )
                )
            }
        }
    }
}
import org.jetbrains.dokka.gradle.engine.parameters.VisibilityModifier

plugins {
    id 'org.jetbrains.dokka' version '2.2.0'
}

dokka {
    dokkaPublications {
        html {
            moduleName.set(project.name)
            moduleVersion.set(project.version.toString())
            outputDirectory.set(layout.buildDirectory.dir("dokka/html"))
            failOnWarning.set(false)
            suppressInheritedMembers.set(false)
            suppressObviousFunctions.set(true)
            offlineMode.set(false)
            includes.from("packages.md", "extra.md")
        }
    }

    dokkaSourceSets {
        // Example: Configuration exclusive to the 'linux' source set
        named("linux") {
            dependentSourceSets { named("native") }
            sourceRoots.from(file("linux/src"))
        }

        configureEach {
            suppress.set(false)
            displayName.set(name)
            documentedVisibilities.set([VisibilityModifier.Public] as Set)
            reportUndocumented.set(false)
            skipEmptyPackages.set(true)
            skipDeprecated.set(false)
            suppressGeneratedFiles.set(true)
            jdkVersion.set(8)
            languageVersion.set("1.7")
            apiVersion.set("1.7")
            sourceRoots.from(file("src"))
            classpath.from(file("libs/dependency.jar"))
            samples.from("samples/Basic.kt", "samples/Advanced.kt")

            sourceLink {
                localDirectory.set(file("src/main/kotlin"))
                remoteUrl.set(new URI("https://example.com/src"))
                remoteLineSuffix.set("#L")
            }

            externalDocumentationLinks {
                url.set(new URI("https://example.com/docs/"))
                packageListUrl.set(new File("/path/to/package-list").toURI().toURL())
            }

            perPackageOption {
                matchingRegex.set(".*api.*")
                suppress.set(false)
                skipDeprecated.set(false)
                reportUndocumented.set(false)
                documentedVisibilities.set([
                        VisibilityModifier.Public,
                        VisibilityModifier.Private,
                        VisibilityModifier.Protected,
                        VisibilityModifier.Internal,
                        VisibilityModifier.Package
                ] as Set)
            }
        }
    }
}