diff options
| author | Ignat Beresnev <ignat.beresnev@jetbrains.com> | 2023-11-10 11:46:54 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-11-10 11:46:54 +0100 |
| commit | 8e5c63d035ef44a269b8c43430f43f5c8eebfb63 (patch) | |
| tree | 1b915207b2b9f61951ddbf0ff2e687efd053d555 /runners/maven-plugin | |
| parent | a44efd4ba0c2e4ab921ff75e0f53fc9335aa79db (diff) | |
| download | dokka-8e5c63d035ef44a269b8c43430f43f5c8eebfb63.tar.gz dokka-8e5c63d035ef44a269b8c43430f43f5c8eebfb63.tar.bz2 dokka-8e5c63d035ef44a269b8c43430f43f5c8eebfb63.zip | |
Restructure the project to utilize included builds (#3174)
* Refactor and simplify artifact publishing
* Update Gradle to 8.4
* Refactor and simplify convention plugins and build scripts
Fixes #3132
---------
Co-authored-by: Adam <897017+aSemy@users.noreply.github.com>
Co-authored-by: Oleg Yukhnevich <whyoleg@gmail.com>
Diffstat (limited to 'runners/maven-plugin')
| -rw-r--r-- | runners/maven-plugin/api/maven-plugin.api | 141 | ||||
| -rw-r--r-- | runners/maven-plugin/build.gradle.kts | 138 | ||||
| -rw-r--r-- | runners/maven-plugin/pom.template.xml | 56 | ||||
| -rw-r--r-- | runners/maven-plugin/src/main/kotlin/DokkaMojo.kt | 615 | ||||
| -rw-r--r-- | runners/maven-plugin/src/main/kotlin/ExternalDocumentationLinkBuilder.kt | 68 | ||||
| -rw-r--r-- | runners/maven-plugin/src/main/kotlin/MavenDokkaLogger.kt | 44 | ||||
| -rw-r--r-- | runners/maven-plugin/src/main/kotlin/PackageOptions.kt | 89 | ||||
| -rw-r--r-- | runners/maven-plugin/src/main/kotlin/SourceLinkMapItem.kt | 69 |
8 files changed, 0 insertions, 1220 deletions
diff --git a/runners/maven-plugin/api/maven-plugin.api b/runners/maven-plugin/api/maven-plugin.api deleted file mode 100644 index 069e7744..00000000 --- a/runners/maven-plugin/api/maven-plugin.api +++ /dev/null @@ -1,141 +0,0 @@ -public abstract class org/jetbrains/dokka/maven/AbstractDokkaMojo : org/apache/maven/plugin/AbstractMojo { - public fun <init> (Ljava/util/List;)V - public fun execute ()V - public final fun getApiVersion ()Ljava/lang/String; - public final fun getCacheRoot ()Ljava/lang/String; - public final fun getClasspath ()Ljava/util/List; - public final fun getDisplayName ()Ljava/lang/String; - public final fun getDocumentedVisibilities ()Ljava/util/Set; - public final fun getDokkaPlugins ()Ljava/util/List; - public final fun getExternalDocumentationLinks ()Ljava/util/List; - public final fun getFailOnWarning ()Z - public final fun getIncludeNonPublic ()Z - public final fun getIncludes ()Ljava/util/List; - public final fun getJdkVersion ()I - public final fun getLanguageVersion ()Ljava/lang/String; - protected final fun getMavenProject ()Lorg/apache/maven/project/MavenProject; - public final fun getModuleName ()Ljava/lang/String; - public final fun getNoJdkLink ()Z - public final fun getNoStdlibLink ()Z - public final fun getOfflineMode ()Z - protected abstract fun getOutDir ()Ljava/lang/String; - public final fun getPerPackageOptions ()Ljava/util/List; - public final fun getPlatform ()Ljava/lang/String; - public final fun getReportUndocumented ()Z - public final fun getSamples ()Ljava/util/List; - protected final fun getSession ()Lorg/apache/maven/execution/MavenSession; - public final fun getSkip ()Z - public final fun getSkipDeprecated ()Z - public final fun getSkipEmptyPackages ()Z - public final fun getSourceDirectories ()Ljava/util/List; - public final fun getSourceLinks ()Ljava/util/List; - public final fun getSourceSetName ()Ljava/lang/String; - public final fun getSuppressInheritedMembers ()Z - public final fun getSuppressObviousFunctions ()Z - public final fun getSuppressedFiles ()Ljava/util/List; - public final fun setApiVersion (Ljava/lang/String;)V - public final fun setCacheRoot (Ljava/lang/String;)V - public final fun setClasspath (Ljava/util/List;)V - public final fun setDisplayName (Ljava/lang/String;)V - public final fun setDocumentedVisibilities (Ljava/util/Set;)V - public final fun setDokkaPlugins (Ljava/util/List;)V - public final fun setExternalDocumentationLinks (Ljava/util/List;)V - public final fun setFailOnWarning (Z)V - public final fun setIncludeNonPublic (Z)V - public final fun setIncludes (Ljava/util/List;)V - public final fun setJdkVersion (I)V - public final fun setLanguageVersion (Ljava/lang/String;)V - protected final fun setMavenProject (Lorg/apache/maven/project/MavenProject;)V - public final fun setModuleName (Ljava/lang/String;)V - public final fun setNoJdkLink (Z)V - public final fun setNoStdlibLink (Z)V - public final fun setOfflineMode (Z)V - public final fun setPerPackageOptions (Ljava/util/List;)V - public final fun setPlatform (Ljava/lang/String;)V - public final fun setReportUndocumented (Z)V - public final fun setSamples (Ljava/util/List;)V - protected final fun setSession (Lorg/apache/maven/execution/MavenSession;)V - public final fun setSkip (Z)V - public final fun setSkipDeprecated (Z)V - public final fun setSkipEmptyPackages (Z)V - public final fun setSourceDirectories (Ljava/util/List;)V - public final fun setSourceLinks (Ljava/util/List;)V - public final fun setSourceSetName (Ljava/lang/String;)V - public final fun setSuppressInheritedMembers (Z)V - public final fun setSuppressObviousFunctions (Z)V - public final fun setSuppressedFiles (Ljava/util/List;)V -} - -public final class org/jetbrains/dokka/maven/DokkaJavadocJarMojo : org/jetbrains/dokka/maven/AbstractDokkaMojo { - public fun <init> ()V - public fun execute ()V - public final fun getOutputDir ()Ljava/lang/String; - public final fun setOutputDir (Ljava/lang/String;)V -} - -public final class org/jetbrains/dokka/maven/DokkaJavadocMojo : org/jetbrains/dokka/maven/AbstractDokkaMojo { - public fun <init> ()V - public final fun getOutputDir ()Ljava/lang/String; - public final fun setOutputDir (Ljava/lang/String;)V -} - -public final class org/jetbrains/dokka/maven/DokkaMojo : org/jetbrains/dokka/maven/AbstractDokkaMojo { - public fun <init> ()V - public final fun getOutputDir ()Ljava/lang/String; - public final fun setOutputDir (Ljava/lang/String;)V -} - -public final class org/jetbrains/dokka/maven/ExternalDocumentationLinkBuilder { - public fun <init> ()V - public final fun build ()Lorg/jetbrains/dokka/ExternalDocumentationLinkImpl; - public final fun getPackageListUrl ()Ljava/net/URL; - public final fun getUrl ()Ljava/net/URL; - public final fun setPackageListUrl (Ljava/net/URL;)V - public final fun setUrl (Ljava/net/URL;)V -} - -public class org/jetbrains/dokka/maven/HelpMojo : org/apache/maven/plugin/AbstractMojo { - public fun <init> ()V - public fun execute ()V -} - -public final class org/jetbrains/dokka/maven/MavenDokkaLogger : org/jetbrains/dokka/utilities/DokkaLogger { - public fun <init> (Lorg/apache/maven/plugin/logging/Log;)V - public fun debug (Ljava/lang/String;)V - public fun error (Ljava/lang/String;)V - public fun getErrorsCount ()I - public final fun getLog ()Lorg/apache/maven/plugin/logging/Log; - public fun getWarningsCount ()I - public fun info (Ljava/lang/String;)V - public fun progress (Ljava/lang/String;)V - public fun setErrorsCount (I)V - public fun setWarningsCount (I)V - public fun warn (Ljava/lang/String;)V -} - -public final class org/jetbrains/dokka/maven/PackageOptions : org/jetbrains/dokka/DokkaConfiguration$PackageOptions { - public fun <init> ()V - public fun getDocumentedVisibilities ()Ljava/util/Set; - public fun getIncludeNonPublic ()Z - public fun getMatchingRegex ()Ljava/lang/String; - public fun getReportUndocumented ()Ljava/lang/Boolean; - public fun getSkipDeprecated ()Z - public fun getSuppress ()Z - public fun setDocumentedVisibilities (Ljava/util/Set;)V - public fun setIncludeNonPublic (Z)V - public fun setMatchingRegex (Ljava/lang/String;)V - public fun setReportUndocumented (Z)V - public fun setSkipDeprecated (Z)V - public fun setSuppress (Z)V -} - -public final class org/jetbrains/dokka/maven/SourceLinkMapItem { - public fun <init> ()V - public final fun getLineSuffix ()Ljava/lang/String; - public final fun getPath ()Ljava/lang/String; - public final fun getUrl ()Ljava/lang/String; - public final fun setLineSuffix (Ljava/lang/String;)V - public final fun setPath (Ljava/lang/String;)V - public final fun setUrl (Ljava/lang/String;)V -} - diff --git a/runners/maven-plugin/build.gradle.kts b/runners/maven-plugin/build.gradle.kts deleted file mode 100644 index 825493ad..00000000 --- a/runners/maven-plugin/build.gradle.kts +++ /dev/null @@ -1,138 +0,0 @@ -/* - * Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license. - */ - -import org.jetbrains.registerDokkaArtifactPublication - -plugins { - id("org.jetbrains.conventions.kotlin-jvm") - id("org.jetbrains.conventions.maven-publish") - id("org.jetbrains.conventions.maven-cli-setup") -} - -dependencies { - implementation(projects.core) - - implementation(libs.apacheMaven.core) - implementation(libs.apacheMaven.pluginApi) - implementation(libs.apacheMaven.pluginAnnotations) - implementation(libs.apacheMaven.archiver) -} - -val mavenPluginTaskGroup = "maven plugin" - -val generatePom by tasks.registering(Sync::class) { - description = "Generate pom.xml for Maven Plugin Plugin" - group = mavenPluginTaskGroup - - val dokka_version: String by project - inputs.property("dokka_version", dokka_version) - - val pomTemplateFile = layout.projectDirectory.file("pom.template.xml") - - val mavenVersion = mavenCliSetup.mavenVersion.orNull - val mavenPluginToolsVersion = mavenCliSetup.mavenPluginToolsVersion.orNull - - from(pomTemplateFile) { - rename { it.replace(".template.xml", ".xml") } - - expand( - "mavenVersion" to mavenVersion, - "dokka_version" to dokka_version, - "mavenPluginToolsVersion" to mavenPluginToolsVersion, - ) - } - - into(temporaryDir) -} - -val prepareHelpMojoDir by tasks.registering(Sync::class) { - description = "Prepare files for generating the Maven Plugin HelpMojo" - group = mavenPluginTaskGroup - - into(layout.buildDirectory.dir("maven-help-mojo")) - from(generatePom) -} - -val helpMojo by tasks.registering(Exec::class) { - description = "Generate the Maven Plugin HelpMojo" - group = mavenPluginTaskGroup - - dependsOn(tasks.installMavenBinary, prepareHelpMojoDir) - - workingDir(prepareHelpMojoDir.map { it.destinationDir }) - executable(mavenCliSetup.mvn.get()) - args("-e", "-B", "org.apache.maven.plugins:maven-plugin-plugin:helpmojo") - - outputs.dir(workingDir) -} - -val helpMojoSources by tasks.registering(Sync::class) { - description = "Sync the HelpMojo source files into a SourceSet SrcDir" - group = mavenPluginTaskGroup - from(helpMojo) { - eachFile { - // drop 2 leading directories - relativePath = RelativePath(true, *relativePath.segments.drop(2).toTypedArray()) - } - } - includeEmptyDirs = false - into(temporaryDir) - include("**/*.java") -} - -val helpMojoResources by tasks.registering(Sync::class) { - description = "Sync the HelpMojo resource files into a SourceSet SrcDir" - group = mavenPluginTaskGroup - from(helpMojo) - into(temporaryDir) - include("**/**") - exclude("**/*.java") -} - -sourceSets.main { - // use the generated HelpMojo as compilation input, so Gradle will automatically generate the mojo - java.srcDirs(helpMojoSources) - resources.srcDirs(helpMojoResources) -} - -val preparePluginDescriptorDir by tasks.registering(Sync::class) { - description = "Prepare files for generating the Maven Plugin descriptor" - group = mavenPluginTaskGroup - - into(layout.buildDirectory.dir("maven-plugin-descriptor")) - - from(tasks.compileKotlin) { into("classes/java/main") } - from(tasks.compileJava) { into("classes/java/main") } - from(helpMojoResources) -} - -val pluginDescriptor by tasks.registering(Exec::class) { - description = "Generate the Maven Plugin descriptor" - group = mavenPluginTaskGroup - - dependsOn(tasks.installMavenBinary, preparePluginDescriptorDir) - - workingDir(preparePluginDescriptorDir.map { it.destinationDir }) - executable(mavenCliSetup.mvn.get()) - args("-e", "-B", "org.apache.maven.plugins:maven-plugin-plugin:descriptor") - - outputs.dir("$workingDir/classes/java/main/META-INF/maven") -} - -tasks.jar { - metaInf { - from(pluginDescriptor) { - into("maven") - } - } - manifest { - attributes("Class-Path" to configurations.runtimeClasspath.map { configuration -> - configuration.resolve().joinToString(" ") { it.name } - }) - } -} - -registerDokkaArtifactPublication("dokkaMavenPlugin") { - artifactId = "dokka-maven-plugin" -} diff --git a/runners/maven-plugin/pom.template.xml b/runners/maven-plugin/pom.template.xml deleted file mode 100644 index b4795112..00000000 --- a/runners/maven-plugin/pom.template.xml +++ /dev/null @@ -1,56 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- - ~ Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license. - --> - -<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.jetbrains.dokka</groupId> - <artifactId>dokka-maven-plugin</artifactId> - <version>${dokka_version}</version> - <packaging>maven-plugin</packaging> - <properties> - <maven.version>${mavenVersion}</maven.version> - <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> - </properties> - <build> - <plugins> - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-plugin-plugin</artifactId> - <version>${mavenPluginToolsVersion}</version> - <configuration> - <helpPackageName>org.jetbrains.dokka.maven</helpPackageName> - <skipErrorNoDescriptorsFound>true</skipErrorNoDescriptorsFound> - </configuration> - <executions> - <execution> - <id>default-descriptor</id> - <goals> - <goal>descriptor</goal> - </goals> - <phase>process-classes</phase> - </execution> - <execution> - <id>help-descriptor</id> - <goals> - <goal>helpmojo</goal> - </goals> - <phase>process-classes</phase> - </execution> - </executions> - </plugin> - </plugins> - <directory>./</directory> - <outputDirectory>./classes/java/main</outputDirectory> - </build> - <dependencies> - <dependency> - <groupId>org.apache.maven.plugin-tools</groupId> - <artifactId>maven-plugin-annotations</artifactId> - <version>${mavenPluginToolsVersion}</version> - <scope>provided</scope> - </dependency> - </dependencies> -</project> diff --git a/runners/maven-plugin/src/main/kotlin/DokkaMojo.kt b/runners/maven-plugin/src/main/kotlin/DokkaMojo.kt deleted file mode 100644 index d14fea9c..00000000 --- a/runners/maven-plugin/src/main/kotlin/DokkaMojo.kt +++ /dev/null @@ -1,615 +0,0 @@ -/* - * Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license. - */ - -package org.jetbrains.dokka.maven - -import org.apache.maven.archiver.MavenArchiveConfiguration -import org.apache.maven.archiver.MavenArchiver -import org.apache.maven.artifact.DefaultArtifact -import org.apache.maven.artifact.handler.DefaultArtifactHandler -import org.apache.maven.artifact.resolver.ArtifactResolutionRequest -import org.apache.maven.artifact.resolver.ArtifactResolutionResult -import org.apache.maven.artifact.resolver.ResolutionErrorHandler -import org.apache.maven.execution.MavenSession -import org.apache.maven.model.Dependency -import org.apache.maven.plugin.AbstractMojo -import org.apache.maven.plugin.MojoExecutionException -import org.apache.maven.plugins.annotations.* -import org.apache.maven.project.MavenProject -import org.apache.maven.project.MavenProjectHelper -import org.apache.maven.repository.RepositorySystem -import org.codehaus.plexus.archiver.Archiver -import org.codehaus.plexus.archiver.jar.JarArchiver -import org.codehaus.plexus.archiver.util.DefaultFileSet -import org.codehaus.plexus.util.xml.Xpp3Dom -import org.jetbrains.dokka.* -import org.jetbrains.dokka.DokkaConfiguration.ExternalDocumentationLink -import java.io.File -import java.net.URL - -public abstract class AbstractDokkaMojo( - private val defaultDokkaPlugins: List<Dependency> -) : AbstractMojo() { - - @Parameter(defaultValue = "\${project}", readonly = true, required = true) - protected var mavenProject: MavenProject? = null - - /** - * The current build session instance. This is used for - * dependency resolver API calls via repositorySystem. - */ - @Parameter(defaultValue = "\${session}", required = true, readonly = true) - protected var session: MavenSession? = null - - @Component - private var repositorySystem: RepositorySystem? = null - - @Component - private var resolutionErrorHandler: ResolutionErrorHandler? = null - - @Parameter(defaultValue = "JVM") - public var displayName: String = "JVM" - - @Parameter - public var sourceSetName: String = "JVM" - - /** - * Source code roots to be analyzed and documented. - * Accepts directories and individual `.kt` / `.java` files. - * - * Default is `{project.compileSourceRoots}`. - */ - @Parameter(required = true, defaultValue = "\${project.compileSourceRoots}") - public var sourceDirectories: List<String> = emptyList() - - /** - * List of directories or files that contain sample functions which are referenced via - * [@sample](https://kotlinlang.org/docs/kotlin-doc.html#sample-identifier) KDoc tag. - */ - @Parameter - public var samples: List<String> = emptyList() - - /** - * List of Markdown files that contain - * [module and package documentation](https://kotlinlang.org/docs/dokka-module-and-package-docs.html). - * - * Contents of specified files will be parsed and embedded into documentation as module and package descriptions. - * - * Example of such a file: - * - * ```markdown - * # Module kotlin-demo - * - * The module shows the Dokka usage. - * - * # Package org.jetbrains.kotlin.demo - * - * Contains assorted useful stuff. - * - * ## Level 2 heading - * - * Text after this heading is also part of documentation for `org.jetbrains.kotlin.demo` - * - * # Package org.jetbrains.kotlin.demo2 - * - * Useful stuff in another package. - * ``` - */ - @Parameter - public var includes: List<String> = emptyList() - - /** - * Classpath for analysis and interactive samples. - * - * Useful if some types that come from dependencies are not resolved/picked up automatically. - * Property accepts both `.jar` and `.klib` files. - * - * Default is `{project.compileClasspathElements}`. - */ - @Parameter(required = true, defaultValue = "\${project.compileClasspathElements}") - public var classpath: List<String> = emptyList() - - /** - * Specifies the location of the project source code on the Web. If provided, Dokka generates - * "source" links for each declaration. See [SourceLinkMapItem] for more details. - */ - @Parameter - public var sourceLinks: List<SourceLinkMapItem> = emptyList() - - /** - * Display name used to refer to the project/module. Used for ToC, navigation, logging, etc. - * - * Default is `{project.artifactId}`. - */ - @Parameter(required = true, defaultValue = "\${project.artifactId}") - public var moduleName: String = "" - - /** - * Whether to skip documentation generation. - * - * Default is `false`. - */ - @Parameter(required = false, defaultValue = "false") - public var skip: Boolean = false - - /** - * JDK version to use when generating external documentation links for Java types. - * - * For instance, if you use [java.util.UUID] from JDK in some public declaration signature, - * and this property is set to `8`, Dokka will generate an external documentation link - * to [JDK 8 Javadocs](https://docs.oracle.com/javase/8/docs/api/java/util/UUID.html) for it. - * - * Default is JDK 8. - */ - @Parameter(required = false, defaultValue = "${DokkaDefaults.jdkVersion}") - public var jdkVersion: Int = DokkaDefaults.jdkVersion - - /** - * Whether to document declarations annotated with [Deprecated]. - * - * Can be overridden on package level by setting [PackageOptions.skipDeprecated]. - * - * Default is `false`. - */ - @Parameter - public var skipDeprecated: Boolean = DokkaDefaults.skipDeprecated - - /** - * Whether to skip packages that contain no visible declarations after - * various filters have been applied. - * - * For instance, if [skipDeprecated] is set to `true` and your package contains only - * deprecated declarations, it will be considered to be empty. - * - * Default is `true`. - */ - @Parameter - public var skipEmptyPackages: Boolean = DokkaDefaults.skipEmptyPackages - - /** - * Whether to emit warnings about visible undocumented declarations, that is declarations without KDocs - * after they have been filtered by [documentedVisibilities]. - * - * This setting works well with [failOnWarning]. - * - * Can be overridden for a specific package by setting [PackageOptions.reportUndocumented]. - * - * Default is `false`. - */ - @Parameter - public var reportUndocumented: Boolean = DokkaDefaults.reportUndocumented - - /** - * Allows to customize documentation generation options on a per-package basis. - * - * @see PackageOptions for details - */ - @Parameter - public var perPackageOptions: List<PackageOptions> = emptyList() - - /** - * Allows linking to Dokka/Javadoc documentation of the project's dependencies. - * - * @see ExternalDocumentationLinkBuilder for details - */ - @Parameter - public var externalDocumentationLinks: List<ExternalDocumentationLinkBuilder> = emptyList() - - /** - * Whether to generate external documentation links that lead to API reference - * documentation for Kotlin's standard library when declarations from it are used. - * - * Default is `false`, meaning links will be generated. - */ - @Parameter(defaultValue = "${DokkaDefaults.noStdlibLink}") - public var noStdlibLink: Boolean = DokkaDefaults.noStdlibLink - - /** - * Whether to generate external documentation links to JDK's Javadocs - * when declarations from it are used. - * - * The version of JDK Javadocs is determined by [jdkVersion] property. - * - * Default is `false`, meaning links will be generated. - */ - @Parameter(defaultValue = "${DokkaDefaults.noJdkLink}") - public var noJdkLink: Boolean = DokkaDefaults.noJdkLink - - /** - * Whether to resolve remote files/links over network. - * - * This includes package-lists used for generating external documentation links: - * for instance, to make classes from standard library clickable. - * - * Setting this to `true` can significantly speed up build times in certain cases, - * but can also worsen documentation quality and user experience, for instance by - * not resolving some dependency's class/member links. - * - * When using offline mode, you can cache fetched files locally and provide them to - * Dokka as local paths. For instance, see [ExternalDocumentationLinkBuilder]. - * - * Default is `false`. - */ - @Parameter(defaultValue = "${DokkaDefaults.offlineMode}") - public var offlineMode: Boolean = DokkaDefaults.offlineMode - - /** - * [Kotlin language version](https://kotlinlang.org/docs/compatibility-modes.html) - * used for setting up analysis and [@sample](https://kotlinlang.org/docs/kotlin-doc.html#sample-identifier) - * environment. - * - * By default, the latest language version available to Dokka's embedded compiler will be used. - */ - @Parameter - public var languageVersion: String? = null - - /** - * [Kotlin API version](https://kotlinlang.org/docs/compatibility-modes.html) - * used for setting up analysis and [@sample](https://kotlinlang.org/docs/kotlin-doc.html#sample-identifier) - * environment. - * - * By default, it will be deduced from [languageVersion]. - */ - @Parameter - public var apiVersion: String? = null - - /** - * Directories or individual files that should be suppressed, meaning declarations from them - * will be not documented. - */ - @Parameter - public var suppressedFiles: List<String> = emptyList() - - /** - * Set of visibility modifiers that should be documented. - * - * This can be used if you want to document protected/internal/private declarations, - * as well as if you want to exclude public declarations and only document internal API. - * - * Can be configured on per-package basis, see [PackageOptions.documentedVisibilities]. - * - * Default is [DokkaConfiguration.Visibility.PUBLIC]. - */ - @Parameter(property = "visibility") - public var documentedVisibilities: Set<DokkaConfiguration.Visibility> = DokkaDefaults.documentedVisibilities - // hack to set the default value for lists, didn't find any other safe way - // maven seems to overwrite Kotlin's default initialization value, so it doesn't matter what you put there - get() = field.ifEmpty { DokkaDefaults.documentedVisibilities } - - /** - * Whether to fail documentation generation if Dokka has emitted a warning or an error. - * Will wait until all errors and warnings have been emitted first. - * - * This setting works well with [reportUndocumented] - * - * Default is `false`. - */ - @Parameter - public var failOnWarning: Boolean = DokkaDefaults.failOnWarning - - /** - * Whether to suppress obvious functions. - * - * A function is considered to be obvious if it is: - * - Inherited from `kotlin.Any`, `Kotlin.Enum`, `java.lang.Object` or `java.lang.Enum`, - * such as `equals`, `hashCode`, `toString`. - * - Synthetic (generated by the compiler) and does not have any documentation, such as - * `dataClass.componentN` or `dataClass.copy`. - * - * Default is `true` - */ - @Parameter(defaultValue = "${DokkaDefaults.suppressObviousFunctions}") - public var suppressObviousFunctions: Boolean = DokkaDefaults.suppressObviousFunctions - - /** - * Whether to suppress inherited members that aren't explicitly overridden in a given class. - * - * Note: this can suppress functions such as `equals`/`hashCode`/`toString`, but cannot suppress - * synthetic functions such as `dataClass.componentN` and `dataClass.copy`. Use [suppressObviousFunctions] - * for that. - * - * Default is `false`. - */ - @Parameter(defaultValue = "${DokkaDefaults.suppressInheritedMembers}") - public var suppressInheritedMembers: Boolean = DokkaDefaults.suppressInheritedMembers - - /** - * Dokka plugins to be using during documentation generation. - * - * Example: - * - * ```xml - * <dokkaPlugins> - * <plugin> - * <groupId>org.jetbrains.dokka</groupId> - * <artifactId>gfm-plugin</artifactId> - * <version>1.7.20</version> - * </plugin> - * </dokkaPlugins> - * ``` - */ - @Parameter - public var dokkaPlugins: List<Dependency> = emptyList() - get() = field + defaultDokkaPlugins - - @Parameter - public var cacheRoot: String? = null - - @Parameter - public var platform: String = "" - - /** - * Deprecated. Use [documentedVisibilities] instead. - */ - @Parameter - public var includeNonPublic: Boolean = DokkaDefaults.includeNonPublic - - protected abstract fun getOutDir(): String - - override fun execute() { - if (skip) { - log.info("Dokka skip parameter is true so no dokka output will be produced") - return - } - - sourceLinks.forEach { - if (it.path.contains("\\")) { - throw MojoExecutionException("Incorrect path property, only Unix based path allowed.") - } - } - - if (moduleName.contains(',')) { - // To figure out why this is needed and if it is still relevant, see the comment here: - // https://github.com/Kotlin/dokka/issues/3011#issuecomment-1568620493 - throw IllegalArgumentException("Module name cannot contain commas as it is used internally as a delimiter.") - } - - fun defaultLinks(config: DokkaSourceSetImpl): Set<ExternalDocumentationLinkImpl> { - val links = mutableSetOf<ExternalDocumentationLinkImpl>() - if (!config.noJdkLink) - links += ExternalDocumentationLink.jdk(jdkVersion) - - if (!config.noStdlibLink) - links += ExternalDocumentationLink.kotlinStdlib() - return links - } - - val sourceSet = DokkaSourceSetImpl( - displayName = displayName, - sourceSetID = DokkaSourceSetID(moduleName, sourceSetName), - classpath = classpath.map(::File), - sourceRoots = sourceDirectories.map(::File).toSet(), - dependentSourceSets = emptySet(), - samples = samples.map(::File).toSet(), - includes = includes.map(::File).toSet(), - includeNonPublic = includeNonPublic, - documentedVisibilities = documentedVisibilities, - reportUndocumented = reportUndocumented, - skipEmptyPackages = skipEmptyPackages, - skipDeprecated = skipDeprecated, - jdkVersion = jdkVersion, - sourceLinks = sourceLinks.map { SourceLinkDefinitionImpl(File(it.path).canonicalPath, URL(it.url), it.lineSuffix) }.toSet(), - perPackageOptions = perPackageOptions.map { - @Suppress("DEPRECATION") // for includeNonPublic, preserve backwards compatibility - PackageOptionsImpl( - matchingRegex = it.matchingRegex, - includeNonPublic = it.includeNonPublic, - documentedVisibilities = it.documentedVisibilities, - reportUndocumented = it.reportUndocumented, - skipDeprecated = it.skipDeprecated, - suppress = it.suppress - ) - }, - externalDocumentationLinks = externalDocumentationLinks.map { it.build() }.toSet(), - languageVersion = languageVersion, - apiVersion = apiVersion, - noStdlibLink = noStdlibLink, - noJdkLink = noJdkLink, - suppressedFiles = suppressedFiles.map(::File).toSet(), - analysisPlatform = if (platform.isNotEmpty()) Platform.fromString(platform) else Platform.DEFAULT, - ).let { - it.copy( - externalDocumentationLinks = defaultLinks(it) + it.externalDocumentationLinks - ) - } - - val logger = MavenDokkaLogger(log) - - val pluginsConfiguration = - (mavenProject?.getPlugin("org.jetbrains.dokka:dokka-maven-plugin")?.configuration as? Xpp3Dom) - ?.getChild("pluginsConfiguration")?.children?.map { - PluginConfigurationImpl( - it.name, - DokkaConfiguration.SerializationFormat.XML, - it.toString() - ) - }.orEmpty() - - val configuration = DokkaConfigurationImpl( - moduleName = moduleName, - outputDir = File(getOutDir()), - offlineMode = offlineMode, - cacheRoot = cacheRoot?.let(::File), - sourceSets = listOf(sourceSet), - // TODO [beresnev] analysis switcher - pluginsClasspath = getArtifactByMaven("org.jetbrains.dokka", "analysis-kotlin-descriptors", dokkaVersion) + - getArtifactByMaven("org.jetbrains.dokka", "dokka-base", dokkaVersion) + - dokkaPlugins.map { getArtifactByMaven(it.groupId, it.artifactId, it.version ?: dokkaVersion) } - .flatten(), - pluginsConfiguration = pluginsConfiguration.toMutableList(), - modules = emptyList(), - failOnWarning = failOnWarning, - suppressObviousFunctions = suppressObviousFunctions, - suppressInheritedMembers = suppressInheritedMembers, - // looks like maven has different life cycle compared to gradle, - // so finalizing coroutines after each module pass causes an error. - // see https://github.com/Kotlin/dokka/issues/2457 - finalizeCoroutines = false, - ) - - val gen = DokkaGenerator(configuration, logger) - - gen.generate() - } - - private fun getArtifactByMaven( - groupId: String, - artifactId: String, - version: String - ): List<File> { - - val request = ArtifactResolutionRequest().apply { - isResolveRoot = true - isResolveTransitively = true - localRepository = session!!.localRepository - remoteRepositories = mavenProject!!.pluginArtifactRepositories - isOffline = session!!.isOffline - isForceUpdate = session!!.request.isUpdateSnapshots - servers = session!!.request.servers - mirrors = session!!.request.mirrors - proxies = session!!.request.proxies - artifact = DefaultArtifact( - groupId, artifactId, version, "compile", "jar", null, - DefaultArtifactHandler("jar") - ) - } - - log.debug("Resolving $groupId:$artifactId:$version ...") - - val result: ArtifactResolutionResult = repositorySystem!!.resolve(request) - resolutionErrorHandler!!.throwErrors(request, result) - return result.artifacts.map { it.file } - } - - private val dokkaVersion: String by lazy { - mavenProject?.pluginArtifacts?.firstOrNull { it.groupId == "org.jetbrains.dokka" && it.artifactId == "dokka-maven-plugin" }?.version - ?: throw IllegalStateException("Not found dokka plugin") - } -} - -@Mojo( - name = "dokka", - defaultPhase = LifecyclePhase.PRE_SITE, - threadSafe = true, - requiresDependencyResolution = ResolutionScope.COMPILE, - requiresProject = true -) -public class DokkaMojo : AbstractDokkaMojo(emptyList()) { - - /** - * Directory to which documentation will be generated. - * - * Default is `{project.basedir}/target/dokka`. - */ - @Parameter(required = true, defaultValue = "\${project.basedir}/target/dokka") - public var outputDir: String = "" - - override fun getOutDir(): String = outputDir -} - -@Mojo( - name = "javadoc", - defaultPhase = LifecyclePhase.PRE_SITE, - threadSafe = true, - requiresDependencyResolution = ResolutionScope.COMPILE, - requiresProject = true -) -public class DokkaJavadocMojo : AbstractDokkaMojo(listOf(javadocDependency)) { - - /** - * Directory to which documentation will be generated. - * - * Default is `{project.basedir}/target/dokkaJavadoc`. - */ - @Parameter(required = true, defaultValue = "\${project.basedir}/target/dok |
