{"id":19594176,"url":"https://github.com/tlinkowski/tlinkowski-superpom","last_synced_at":"2026-01-24T16:43:40.997Z","repository":{"id":57742536,"uuid":"179822248","full_name":"tlinkowski/tlinkowski-superpom","owner":"tlinkowski","description":"Gradle Settings \u0026 Gradle SuperPOM plugins for all projects of Tomasz Linkowski.","archived":false,"fork":false,"pushed_at":"2019-09-16T03:03:41.000Z","size":515,"stargazers_count":4,"open_issues_count":5,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-04-27T15:49:08.762Z","etag":null,"topics":["configuration","gradle","gradle-plugin","sharing"],"latest_commit_sha":null,"homepage":"http://superpom.tlinkowski.pl/","language":"Kotlin","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tlinkowski.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-04-06T11:00:52.000Z","updated_at":"2020-10-24T08:28:17.000Z","dependencies_parsed_at":"2022-09-09T11:20:30.479Z","dependency_job_id":null,"html_url":"https://github.com/tlinkowski/tlinkowski-superpom","commit_stats":null,"previous_names":[],"tags_count":9,"template":false,"template_full_name":null,"purl":"pkg:github/tlinkowski/tlinkowski-superpom","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tlinkowski%2Ftlinkowski-superpom","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tlinkowski%2Ftlinkowski-superpom/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tlinkowski%2Ftlinkowski-superpom/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tlinkowski%2Ftlinkowski-superpom/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tlinkowski","download_url":"https://codeload.github.com/tlinkowski/tlinkowski-superpom/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tlinkowski%2Ftlinkowski-superpom/sbom","scorecard":{"id":889415,"data":{"date":"2025-08-11","repo":{"name":"github.com/tlinkowski/tlinkowski-superpom","commit":"65cb4e2ab913b81bade58ced88d746081fabab54"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":2.9,"checks":[{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Code-Review","score":0,"reason":"Found 0/30 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Binary-Artifacts","score":9,"reason":"binaries present in source code","details":["Warn: binary detected: gradle/wrapper/gradle-wrapper.jar:1"],"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"SAST","score":0,"reason":"no SAST tool detected","details":["Warn: no pull requests merged into dev branch"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: Apache License 2.0: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}}]},"last_synced_at":"2025-08-24T11:13:10.043Z","repository_id":57742536,"created_at":"2025-08-24T11:13:10.043Z","updated_at":"2025-08-24T11:13:10.043Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28731790,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-24T10:24:43.181Z","status":"ssl_error","status_checked_at":"2026-01-24T10:24:36.112Z","response_time":89,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["configuration","gradle","gradle-plugin","sharing"],"created_at":"2024-11-11T08:42:29.471Z","updated_at":"2026-01-24T16:43:40.978Z","avatar_url":"https://github.com/tlinkowski.png","language":"Kotlin","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Gradle SuperPOM of Tomasz Linkowski\n\n[![Build (Linux)](https://img.shields.io/travis/com/tlinkowski/tlinkowski-superpom/master.svg?logo=linux)](https://travis-ci.com/tlinkowski/tlinkowski-superpom)\n[![Build (Windows)](https://img.shields.io/appveyor/ci/tlinkowski/tlinkowski-superpom/master.svg?logo=windows)](https://ci.appveyor.com/project/tlinkowski/tlinkowski-superpom/branch/master)\n[![Code coverage](https://img.shields.io/codecov/c/github/tlinkowski/tlinkowski-superpom.svg)](https://codecov.io/gh/tlinkowski/tlinkowski-superpom)\n[![Codacy grade](https://img.shields.io/codacy/grade/81a0cef956a34083accd2f8e401a66de.svg)](https://app.codacy.com/project/tlinkowski/tlinkowski-superpom/dashboard)\n\n[![Maven Central](https://img.shields.io/maven-central/v/pl.tlinkowski.gradle.my/pl.tlinkowski.gradle.my.superpom?label=Maven%20Central)](https://search.maven.org/search?q=g:pl.tlinkowski.gradle.my)\n[![Javadocs](https://javadoc.io/badge/pl.tlinkowski.gradle.my/pl.tlinkowski.gradle.my.superpom.svg?color=blue)](https://javadoc.io/doc/pl.tlinkowski.gradle.my/pl.tlinkowski.gradle.my.superpom)\n[![Semantic Versioning](https://img.shields.io/badge/-semantic%20versioning-333333)](https://semver.org/)\n[![Automated Release Notes by gren](https://img.shields.io/badge/%F0%9F%A4%96-release%20notes-00B2EE.svg)](https://github-tools.github.io/github-release-notes/)\n\nThis project is inspired by [The Gradle SuperPOM](http://andresalmiray.com/the-gradle-superpom/) post by\n[Andres Almiray](https://twitter.com/aalmiray).\n\nThis projects provides two plugins:\n\n1.  A Gradle [`Project`](https://docs.gradle.org/current/javadoc/org/gradle/api/Project.html)\n    plugin (id: [`pl.tlinkowski.gradle.my.superpom`](subprojects/pl.tlinkowski.gradle.my.superpom))\n\n2.  A Gradle [`Settings`](https://docs.gradle.org/current/javadoc/org/gradle/api/initialization/Settings.html)\n    plugin (id: [`pl.tlinkowski.gradle.my.settings`](subprojects/pl.tlinkowski.gradle.my.settings))\n\nTogether, those two plugins preconfigure Gradle builds for each of my projects.\n\n## Usage\n\n### by Tomasz Linkowski\n\n`gradle.properties`:\n\n```properties\n# Release scopes: [major, minor, patch]\nreckon.scope=minor\n# Dependencies\nmySuperpomVersion=x.y.z\n```\n\n`settings.gradle.kts`:\n\n```kotlin\nbuildscript {\n  repositories {\n    mavenCentral()\n  }\n  dependencies {\n    val mySuperpomVersion: String by settings\n    classpath(group = \"pl.tlinkowski.gradle.my\", name = \"pl.tlinkowski.gradle.my.settings\", version = mySuperpomVersion)\n  }\n}\napply(plugin = \"pl.tlinkowski.gradle.my.settings\")\n```\n\n`build.gradle.kts`:\n\n```kotlin\nplugins {\n  id(\"pl.tlinkowski.gradle.my.superpom\")\n}\n```\n\nFor a complete usage example, see [sample-project](test-data/sample-project).\n\n### by others\n\nIf you like what this plugin does, you can:\n\n1.  [Fork](https://github.com/tlinkowski/tlinkowski-superpom/fork) this project.\n2.  Change data related to Tomasz Linkowski to match your person / organization (especially classes with `My` prefix).\n3.  Set up your Bintray and Maven Central accounts.\n4.  Release **your own** version of the Gradle Settings \u0026 SuperPOM plugin.\n\n## Features\n\n### Settings Plugin (id: `pl.tlinkowski.gradle.my.settings`)\n\nConfigures:\n\n1.  plugin management:\n\n    -   Maven Central repository for `pl.tlinkowski.gradle.my.superpom` (this plugin is not deployed to Gradle Plugin\n        Portal as it's not a general-use plugin)\n\n    -   automatic version resolution for `pl.tlinkowski.gradle.my.superpom`\n        (using `mySuperpomVersion` property in `gradle.properties`)\n\n2.  project structure (inspired by [Kordamp project structure](https://aalmiray.github.io/kordamp-gradle-plugins/#_project_structure)):\n\n    -   subprojects in `subprojects` directory\n    -   build file names changed from `build.gradle.kts` to `\u003csubproject-name\u003e.gradle.kts`\n    -   build files required for all subprojects\n    -   subprojects optionally grouped under subdirectories (e.g. `subprojects/sample/pl.tlinkowski.xyz.sample`)\n\n### Project Plugin (id: `pl.tlinkowski.gradle.my.superpom`)\n\n#### Project Preconfiguration\n\nThis is the basic feature described by Andres Almiray in [his post](http://andresalmiray.com/the-gradle-superpom/).\n\nThis SuperPOM plugin can be applied to the **root** project only, and it does the following:\n\n1.  for all projects:\n\n    -   applies: [`idea`](https://docs.gradle.org/current/userguide/idea_plugin.html) plugin\n\n    -   configures: Maven Central repository\n\n2.  for the root project:\n\n    -   applies:\n\n        -   [`org.kordamp.gradle.project`](https://aalmiray.github.io/kordamp-gradle-plugins/#_org_kordamp_gradle_project) plugin\n        -   [`org.kordamp.gradle.bintray`](https://aalmiray.github.io/kordamp-gradle-plugins/#_org_kordamp_gradle_bintray) plugin\n        -   [`org.ajoberstar.grgit`](https://github.com/ajoberstar/grgit) plugin\n        -   [`org.ajoberstar.reckon`](https://github.com/ajoberstar/reckon) plugin\n        -   [`com.github.ben-manes.versions`](https://github.com/ben-manes/gradle-versions-plugin) plugin\n\n    -   configures:\n\n        -   main project properties using\n            [Kordamp DSL](https://aalmiray.github.io/kordamp-gradle-plugins/#_org_kordamp_gradle_base_dsl)\n            ([`MyCoreConfigPlugin`](subprojects/pl.tlinkowski.gradle.my.superpom/src/main/kotlin/pl/tlinkowski/gradle/my/superpom/shared/internal/plugin/MyCoreConfigPlugin.kt))\n\n        -   shared file import tasks (see [direct file sharing](#direct-file-sharing))\n\n        -   `SNAPSHOT`/`FINAL` release stages for [reckon](https://github.com/ajoberstar/reckon)\n            ([`VersionConfigPlugin`](subprojects/pl.tlinkowski.gradle.my.superpom/src/main/kotlin/pl/tlinkowski/gradle/my/superpom/shared/internal/plugin/VersionConfigPlugin.kt))\n\n        -   a [comprehensive release process](#comprehensive-release-process)\n\n        -   [dependency updates](https://github.com/ben-manes/gradle-versions-plugin): skipping Release Candidates\n            ([`DependencyUpdatesConfigPlugin`](subprojects/pl.tlinkowski.gradle.my.superpom/src/main/kotlin/pl/tlinkowski/gradle/my/superpom/shared/internal/plugin/DependencyUpdatesConfigPlugin.kt))\n\n        -   [project Lombok usage](#lombok) (opt-in)\n            ([`LombokConfigPlugin`](subprojects/pl.tlinkowski.gradle.my.superpom/src/main/kotlin/pl/tlinkowski/gradle/my/superpom/shared/internal/plugin/LombokConfigPlugin.kt))\n\n3.  for subprojects:\n\n    -   applies:\n\n        -   [`org.javamodularity.moduleplugin`](https://github.com/java9-modularity/gradle-modules-plugin) plugin\n            (for JPMS support)\n\n        -   [`groovy`](https://docs.gradle.org/current/userguide/groovy_plugin.html) plugin\n            (for test code: [Spock](http://spockframework.org/))\n\n        -   [`kotlin(\"jvm\")`](https://kotlinlang.org/docs/reference/using-gradle.html) plugin\n            (for test code: custom helpers)\n\n    -   configures:\n\n        -   logging of test events\n            ([`TestConfigPlugin`](subprojects/pl.tlinkowski.gradle.my.superpom/src/main/kotlin/pl/tlinkowski/gradle/my/superpom/shared/internal/plugin/TestConfigPlugin.kt))\n\n        -   test dependencies on Kotlin, Groovy, and [Spock](http://spockframework.org/)\n            ([`TestConfigPlugin`](subprojects/pl.tlinkowski.gradle.my.superpom/src/main/kotlin/pl/tlinkowski/gradle/my/superpom/shared/internal/plugin/TestConfigPlugin.kt))\n\n            -   at `testImplementaton` scope (if\n                [`superpom.isTestProject`](subprojects/pl.tlinkowski.gradle.my.superpom/src/main/kotlin/pl/tlinkowski/gradle/my/superpom/shared/extension/MySuperpomExtension.kt)\n                is `false` \u0026mdash; default)\n\n            -   at `api` scope (if `superpom.isTestProject` is `true` \u0026mdash; opt-in)\n\n        -   `compileTestGroovy` dependency on `compileTestKotlin` (so that Spock can access Kotlin helpers)\n            ([`TestConfigPlugin`](subprojects/pl.tlinkowski.gradle.my.superpom/src/main/kotlin/pl/tlinkowski/gradle/my/superpom/shared/internal/plugin/TestConfigPlugin.kt))\n\n        -   [running tests on classpath](https://github.com/java9-modularity/gradle-modules-plugin#fall-back-to-classpath-mode)\n            (necessary as Groovy isn't JPMS-compatible)\n            ([`ModularityConfigPlugin`](subprojects/pl.tlinkowski.gradle.my.superpom/src/main/kotlin/pl/tlinkowski/gradle/my/superpom/shared/internal/plugin/ModularityConfigPlugin.kt))\n\n        -   minimum line code coverage = **95%** ([JaCoCo](https://www.jacoco.org/jacoco/))\n            ([`JacocoConfigPlugin`](subprojects/pl.tlinkowski.gradle.my.superpom/src/main/kotlin/pl/tlinkowski/gradle/my/superpom/shared/internal/plugin/JacocoConfigPlugin.kt))\n\n        -   project name and module name validation (see [Naming Convention](#naming-convention))\n            ([`NamingConventionEnforcementPlugin`](subprojects/pl.tlinkowski.gradle.my.superpom/src/main/kotlin/pl/tlinkowski/gradle/my/superpom/shared/internal/plugin/NamingConventionEnforcementPlugin.kt))\n\n        -   [`Automatic-Module-Name`](https://docs.oracle.com/en/java/javase/12/docs/specs/jar/jar.html#modular-jar-files)\n            equal to `project.name` (if `module-info.java` is absent)\n            ([`ModularityConfigPlugin`](subprojects/pl.tlinkowski.gradle.my.superpom/src/main/kotlin/pl/tlinkowski/gradle/my/superpom/shared/internal/plugin/ModularityConfigPlugin.kt))\n\n        -   publishing to JCenter and Maven Central\n            ([`MyCentralPublishConfigPlugin`](subprojects/pl.tlinkowski.gradle.my.superpom/src/main/kotlin/pl/tlinkowski/gradle/my/superpom/shared/internal/plugin/MyCentralPublishConfigPlugin.kt))\n\n#### Comprehensive Release Process\n\nThis plugin configures a comprehensive release process by:\n \n-   exposing `release` Gradle task (which serves as the root of a complex task chain)\n\n-   providing [shared](#direct-file-sharing) [`release.bat`](release.bat) script\n    (which simply calls `gradle clean` followed by `gradle release -Preckon.stage=final`)\n\nThe comprehensive release process is configured by\n[`MyComprehensiveReleaseConfigurator`](subprojects/pl.tlinkowski.gradle.my.superpom/src/main/kotlin/pl/tlinkowski/gradle/my/superpom/shared/internal/configurator/MyComprehensiveReleaseConfigurator.kt)\nand includes:\n\n1.  Release validation (requirements: clean repo, pushed `master` branch, `reckon.stage=final` property)\n2.  Full clean build (to make 100% sure we can release)\n3.  Confirmations to make sure the release is going fine\n4.  Changelog generation (by [gren](https://github.com/github-tools/github-release-notes), requires Node.js)\n5.  Tagging the release in Git\n6.  Publishing to GitHub (by [gren](https://github.com/github-tools/github-release-notes), requires Node.js)\n7.  Publishing to central repos (JCenter \u0026 Maven Central)\n8.  Post-release reset of the release scope for [reckon](https://github.com/ajoberstar/reckon) in `gradle.properties`\n\nThis is how a Gradle build log of such a release process looks:\n\n```text\n\u003e Task :validateReleasePossible        // 1\n\n\u003e Task :\u003csubproject-1\u003e:[...]           // 2\n\u003e Task :\u003csubproject-1\u003e:build           // 2\n\n\u003e Task :\u003csubproject-2\u003e:[...]           // 2\n\u003e Task :\u003csubproject-2\u003e:build           // 2\n\n\u003e Task :confirmReleaseProcessLaunch    // 3\n=== Do you want to begin the release process for version 0.1.0 of 'sample-project'? [y/N] ===\ny\n\n\u003e Task :addTemporaryVersionTag         // 4 (required by gren)\n\u003e Task :generateChangelog              // 4 (gren)\n\u003e Task :removeTemporaryVersionTag      // 4 (no longer needed)\n\n\u003e Task :confirmChangelogPush           // 3\n=== Do you want to push the updated CHANGELOG.md and continue with the release process? [y/N] ===\ny\n\n\u003e Task :pushUpdatedChangelog           // 4\n\u003e Task :addFinalVersionTag             // 5\n\n\u003e Task :confirmFinalPublication        // 3\n=== Are you SURE you want to publish the code at 0.1.0 tag to GitHub, JCenter \u0026 MavenCentral? [y/N] ===\ny\n\n\u003e Task :releaseToGitHub                // 6 (gren)\n\n\u003e Task :\u003csubproject-1\u003e:[...]                               // 7\n\u003e Task :\u003csubproject-1\u003e:publishMainPublicationToMavenLocal  // 7\n\n\u003e Task :\u003csubproject-2\u003e:[...]                               // 7\n\u003e Task :\u003csubproject-2\u003e:publishMainPublicationToMavenLocal  // 7\n\n\u003e Task :injectReleasePasswords         // 7\n\n\u003e Task :\u003csubproject-1\u003e:[...]           // 7\n\u003e Task :\u003csubproject-1\u003e:bintrayUpload   // 7\n\n\u003e Task :\u003csubproject-2\u003e:[...]           // 7\n\u003e Task :\u003csubproject-2\u003e:bintrayUpload   // 7\n\n\u003e Task :bintrayPublish                 // 7\n\u003e Task :releaseToCentralRepos          // 7\n\u003e Task :release\n\u003e Task :resetScopeInGradleProperties   // 8\n\u003e Task :pushUpdatedGradleProperties    // 8\n```\n\nNote the\n[`injectReleasePasswords`](subprojects/pl.tlinkowski.gradle.my.superpom/src/main/kotlin/pl/tlinkowski/gradle/my/superpom/shared/internal/task/InjectReleasePasswordsTask.kt)\ntask, which obtains the following passwords for performing a release:\n\n-   `bintrayApiKey`: from Gradle properties (i.e. `~/.gradle/gradle.properties`),\n-   `gnupgPassphrase`, `sonatypePassword`: by requesting them in a Swing dialog (not suitable for CI)\n\nAlso, note that thanks to [reckon](https://github.com/ajoberstar/reckon) plugin, we don't need to do the classic\n\"pre-release version bumps\". Instead, we:\n\n-   automatically reset the version scope after a release to `patch` (= \"post-release version bump\")\n-   manually change the scope to `minor` or `major` whenever we commit any changes that are in such scope\n\n#### Gradle Configuration Sharing\n\nA large part of the build configuration for:\n\n-   this (*source*) project\n    (defined mostly in the included [`buildSrc`](buildSrc) build), and\n\n-   *target* projects\n    (defined in [`pl.tlinkowski.gradle.my.superpom`](subprojects/pl.tlinkowski.gradle.my.superpom) plugin project)\n\nis *shared* as [`pl.tlinkowski.gradle.my.superpom.shared`](subprojects/pl.tlinkowski.gradle.my.superpom/src/main/kotlin/pl/tlinkowski/gradle/my/superpom/shared)\npackage (see [`MyCompleteSharedConfigPlugin`](subprojects/pl.tlinkowski.gradle.my.superpom/src/main/kotlin/pl/tlinkowski/gradle/my/superpom/shared/internal/plugin/MyCompleteSharedConfigPlugin.kt)).\n\nThanks to this, we don't have to:\n\n-   duplicate large portions of configuration between the *source* and *target* projects, nor\n\n-   apply the previous version of this plugin to itself to avoid the duplication mentioned above\n    (as Andres Almiray suggests in [his post](http://andresalmiray.com/the-gradle-superpom/))\n\n    -   such approach would be problematic for [direct file sharing](#direct-file-sharing)\n\nThis is achieved by synchronizing the contents of the SuperPOM plugin's\n[`shared`](subprojects/pl.tlinkowski.gradle.my.superpom/src/main/kotlin/pl/tlinkowski/gradle/my/superpom/shared) \npackage with a corresponding `shared` package in `buildSrc`\n(see [`buildSrc/build.gradle.kts`](buildSrc/build.gradle.kts) for details).\n\n#### Gradle Property Sharing\n\nGradle properties at [`gradle/shared-gradle.properties`](gradle/shared-gradle.properties) are shared by\n[`SuperpomSharedFileExportPlugin`](buildSrc/src/main/kotlin/pl/tlinkowski/gradle/my/buildsrc/plugin/SuperpomSharedFileExportPlugin.kt)\n(a part of [direct file sharing](#direct-file-sharing) mechanism). Then, these properties are imported by:\n\n-   by [`shared-gradle-properties.gradle.kts`](gradle/shared-gradle-properties.gradle.kts),\n    for [`buildSrc`](buildSrc), root [`settings.gradle.kts`](settings.gradle.kts),\n    and root [`build.gradle.kts`](build.gradle.kts)\n\n-   by [`SuperpomSharedGradlePropertyImportPlugin`](subprojects/pl.tlinkowski.gradle.my.superpom/src/main/kotlin/pl/tlinkowski/gradle/my/superpom/internal/plugin/SuperpomSharedGradlePropertyImportPlugin.kt),\n    for all *target* projects\n\nIf a shared property to be imported already exists, it's ignored with a warning.\n\n#### Direct File Sharing\n\nSelected files in this project can be directly exported to projects that apply this SuperPOM plugin. It can be viewed\nas a \"sync\" operation between this (*source*) project and all *target* projects.\n\nThe files to be shared are specified in\n[`SuperpomFileSharing`](subprojects/pl.tlinkowski.gradle.my.superpom/src/main/kotlin/pl/tlinkowski/gradle/my/superpom/shared/internal/SuperpomFileSharing.kt)\n(usually, it's a good idea to git-ignore them in *target* projects). Currently, the following files are shared *directly*:\n\n-   `idea`: parts of IntelliJ configuration from [`.idea`](.idea) directory\n    (subdirectories `codeStyles`, `copyright`, `inspectionProfiles`)\n\n-   `release`: files related to releasing, like [`release.bat`](release.bat) script and Node.js configuration for\n    [gren](https://github.com/github-tools/github-release-notes)\n\n-   `ci`: configuration for Continuous Integration environments, i.e. [`.appveyor.yml`](.appveyor.yml) and\n    [`.travis.yml`](.travis.yml) files (these files should *not* be git-ignored in *target* projects)\n\n-   `lombok`: [Lombok configuration](https://projectlombok.org/features/configuration),\n    i.e. [`lombok.config`](lombok.config) file\n\nThis feature is implemented:\n\n-   in [`SuperpomSharedFileExportPlugin`](buildSrc/src/main/kotlin/pl/tlinkowski/gradle/my/buildsrc/plugin/SuperpomSharedFileExportPlugin.kt),\n    by registering a special `exportSharedFiles` task for this (*source*) project\n\n    -   the task zips files to be exported and places the resulting archive in the\n        [resources](subprojects/pl.tlinkowski.gradle.my.superpom/src/main/resources) of the SuperPOM plugin\n\n-   in [`SuperpomSharedFileImportPlugin`](subprojects/pl.tlinkowski.gradle.my.superpom/src/main/kotlin/pl/tlinkowski/gradle/my/superpom/internal/plugin/SuperpomSharedFileImportPlugin.kt),\n    by registering a special `importSharedFiles` task for a *target* project\n\n    -   the task reads the archive as a resource and unzips it in the corresponding location\n\n#### Lombok\n\nIf [`superpom.useLombok`](subprojects/pl.tlinkowski.gradle.my.superpom/src/main/kotlin/pl/tlinkowski/gradle/my/superpom/shared/extension/MySuperpomExtension.kt)\nis `true`, this plugin (through [`LombokConfigPlugin`](subprojects/pl.tlinkowski.gradle.my.superpom/src/main/kotlin/pl/tlinkowski/gradle/my/superpom/shared/internal/plugin/LombokConfigPlugin.kt)):\n\n-   adds `compileOnly` and `annotationProcessor` dependencies on [Project Lombok](https://projectlombok.org/)\n    (like [`gradle-lombok`](https://github.com/franzbecker/gradle-lombok) plugin)\n\n-   configures [`delombokJava`](subprojects/pl.tlinkowski.gradle.my.superpom/src/main/kotlin/pl/tlinkowski/gradle/my/superpom/shared/internal/task/DelombokJavaTask.kt)\n    task, which generates [delomboked](https://projectlombok.org/features/delombok) version of the main Java source code\n    (like [`gradle-delombok`](https://github.com/lukoerfer/gradle-delombok) plugin, but in a JPMS-compatible way)\n\n-   configures `javadoc` task to use the delomboked source code as its source\n    (otherwise, JavaDoc wouldn't reflect code generated by Lombok at all)\n\n## Naming Convention\n\nThis project applies a\n[naming convention for Maven \u0026 JPMS by Christian Stein](https://sormuras.github.io/blog/2019-08-04-maven-coordinates-and-java-module-names).\nIn short:\n \n\u003e Gradle project name = JPMS module name\n\nThe SuperPOM plugin [enforces this convention](subprojects/pl.tlinkowski.gradle.my.superpom/src/main/kotlin/pl/tlinkowski/gradle/my/superpom/shared/internal/plugin/NamingConventionEnforcementPlugin.kt)\nby ensuring that the Gradle project name (i.e. Maven `artifactId`):\n\n-   starts with Maven `groupId`\n\n-   is a prefix of every package in the project\n\n-   equals JPMS module name (only if `module-info.java` is present)\n\n-   is [valid](subprojects/pl.tlinkowski.gradle.my.superpom/src/main/kotlin/pl/tlinkowski/gradle/my/superpom/shared/internal/ModuleNameValidator.kt)\n    automatic JPMS module name (only if `module-info.java` is absent)\n\n## Requirements\n\nGradle 5+, JDK 11+.\n\n## About the Author\n\nSee my webpage ([tlinkowski.pl](https://tlinkowski.pl/)) or\nfind me on Twitter ([@t_linkowski](https://twitter.com/t_linkowski)).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftlinkowski%2Ftlinkowski-superpom","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftlinkowski%2Ftlinkowski-superpom","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftlinkowski%2Ftlinkowski-superpom/lists"}