{"id":13902391,"url":"https://github.com/usefulness/project-starter","last_synced_at":"2025-07-24T05:37:04.367Z","repository":{"id":37895073,"uuid":"211367914","full_name":"usefulness/project-starter","owner":"usefulness","description":"Set of plugins that may be useful in Multi-Module Android projects","archived":false,"fork":false,"pushed_at":"2025-07-21T12:35:35.000Z","size":1593,"stargazers_count":26,"open_issues_count":1,"forks_count":6,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-07-21T14:41:35.275Z","etag":null,"topics":["android","android-libraries","baseline","checkstyle","codecov","gradle","gradle-plugin","kotlin","kotlin-modules","modularization","multi","quality","quality-plugin","release","semver","versioning"],"latest_commit_sha":null,"homepage":"","language":"Kotlin","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/usefulness.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,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2019-09-27T17:16:27.000Z","updated_at":"2025-07-21T12:35:38.000Z","dependencies_parsed_at":"2023-02-19T00:01:37.626Z","dependency_job_id":"64707a16-ebd0-4dea-b27c-22effe42caf6","html_url":"https://github.com/usefulness/project-starter","commit_stats":null,"previous_names":[],"tags_count":107,"template":false,"template_full_name":null,"purl":"pkg:github/usefulness/project-starter","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/usefulness%2Fproject-starter","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/usefulness%2Fproject-starter/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/usefulness%2Fproject-starter/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/usefulness%2Fproject-starter/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/usefulness","download_url":"https://codeload.github.com/usefulness/project-starter/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/usefulness%2Fproject-starter/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":266796910,"owners_count":23985495,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-07-24T02:00:09.469Z","response_time":99,"last_error":null,"robots_txt_status":null,"robots_txt_updated_at":null,"robots_txt_url":"https://github.com/robots.txt","online":true,"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":["android","android-libraries","baseline","checkstyle","codecov","gradle","gradle-plugin","kotlin","kotlin-modules","modularization","multi","quality","quality-plugin","release","semver","versioning"],"created_at":"2024-08-06T22:01:07.863Z","updated_at":"2025-07-24T05:37:04.346Z","avatar_url":"https://github.com/usefulness.png","language":"Kotlin","readme":"## Starter\n___\n\n[![Build Project](https://github.com/usefulness/project-starter/actions/workflows/default.yml/badge.svg?branch=master)](https://github.com/usefulness/project-starter/actions/workflows/default.yml)\n\u0026nbsp;[![ktlint](https://img.shields.io/badge/code%20style-%E2%9D%A4-FF4081.svg)](https://ktlint.github.io/)\n\n[![version](https://img.shields.io/maven-metadata/v/https/plugins.gradle.org/m2/com/project/starter/jvm/maven-metadata.xml?label=gradle)](https://plugins.gradle.org/search?term=com.starter) \n\n\n## Motivation\n\nMaintaining multiple multi-module Android project often requires **copying project configuration across different projects**.\nEven when project reaches more advanced stage it is still required to put non-minimal effort to maintain its configuration.  \nStarting a new project, from the scratch, **takes more than a day** to configure every tool you usually want to use.\nSometimes people create template project or another way of keeping your project configuration in a good shape is using `buildSrc` plugins.\nLess code written, ease of sharing between projects but still some part of the code needed to be copied.\n\nThis project goes further and addresses that issue by **exposing set of plugins** useful when approaching multi-module setup with _Gradle_ build system.\n\n## Content\n\nRepository consists of several plugins that makes initial project configuration effortless and easily extensible.\nEach module consists of configuration code most commonly used in Android project configuration.\n\n### Module plugins\n#### Kotlin Library Plugin\nPlugin configures [code style tasks](#quality-plugin), hooks for [common tasks](#day-to-day-use), \nsets coverage reports generation and manages [versioning](#versioning-plugin) of the artifact\n    \nApply plugin to **project** level `build.gradle`\n\n``` groovy\nplugins {\n    id(\"com.starter.library.kotlin\") version(\"x.y.z\")\n}\n\n// optional config with default values\nprojectConfig {\n    javaFilesAllowed false\n}\n```\n\n- `javaFilesAllowed` - defines if the project can contain java files, fails the build otherwise\n\n#### Multiplatform Library Plugin\nFor kotlin multiplatform libraries apply plugin to **project** level `build.gradle`\n\n``` groovy\nplugins {\n    id(\"com.starter.library.multiplatform\") version(\"x.y.z\")\n}\n```\n\n#### Android Application/Library Plugin\nIn addition to customizations made to [Kotlin Library Plugin](#kotlin-library-plugin) Android plugins \ntweaks default Android Gradle Plugin setup by disabling _BuildConfig_ file generation \nor recognizing `src/main/kotlin` (and similar) path as a valid source set. \n\nAndroid Library plugin requires adding to **project** level `build.gradle`:\n\n``` groovy\nplugins {\n    id(\"com.starter.library.android\") version(\"x.y.z\") \n    // or id(\"com.starter.application.android\") version(\"x.y.z\") \n}\n\n// optional config with default values\nprojectConfig {\n    javaFilesAllowed false\n    coverageExclusions [\"\"]\n}\n\n// overridden settings for single project\nandroid {\n    defaultConfig {\n        minSdkVersion 21\n    }\n}\n```\n\n- `javaFilesAllowed` - defines if the project can contain java files, fails the build otherwise.  \n(Useful in large projects where you want to enforce new code written in new modules to be written in Java.)\n- `coverageExclusions` - defines jacoco coverage exclusions for specific module\n\n##### Day-to-day use\nAfter applying _Library_/_Application_ plugin following tasks become available:\n- `./gradlew projectTest`  \n  Runs tests for all modules using either predefined tasks (i.e. `test` for kotlin modules or `testDebugUnitTest` for android libraries) or use customized values.\n- `./gradlew projectLint`  \n  Runs Android lint checks against all modules (if custom lint checks are applied then for Kotlin modules too)\n- `./gradlew projectCodeStyle`  \n  Verifies if code style matches modern standards using tools such as [`ktlint`](https://github.com/pinterest/ktlint), [`Detekt`](https://github.com/arturbosch/detekt) with predefined config.\n- `./gradlew projectCoverage`  \n  Automatically generates test coverage reports for all modules using [`Jacoco`](https://github.com/jacoco/jacoco)\n\nThose tasks allows you to run tests efficiently for all modules by typing just a single task.\n\n### Standalone plugins\n#### Quality Plugin\nTo only configure codestyle tools apply plugin to **project** level `build.gradle`\n```\nplugins {\n    id(\"com.starter.quality\") version(\"x.y.z\") \n}\n```\nwhich applies and configures code style tasks for the project automatically.  \n\nTasks available:\n- `./gradlew projectCodeStyle` - checks codestyle using all tools \n- `./gradlew issueLinksReport` - finds and check state of all issuetracker links linked in code comments  \n\nQuality Plugin gets applied automatically when using any of module _Application_/_Library_ plugins above.\n\n#### Versioning Plugin\n\nUses simple tag-based versioning, in a Configuration Cache compatible way.\n\nTo enable it as a standalone plugin, apply plugin to root project `build.gradle`\n```\n apply plugin: 'com.starter.versioning'\n```\nVersioning plugin gets applied automatically when using any of module _Application_/_Library_ plugins above and can be disabled using [Global Configuration](Advanced.md#global-configuration)\n\n### Advanced usage\nSee [Advanced usage](Advanced.md)\n\n## Sample project\nSample [Github Browser](https://github.com/mateuszkwiecinski/github_browser) project - a customized, `buildSrc` based plugin application.\n\n## License\nThe library is available under [MIT License](/LICENSE) and highly benefits from binary dependencies:\n- `Kotlinter Gradle` - [License](https://github.com/jeremymailen/kotlinter-gradle/blob/master/LICENSE)\n- `axion-relese-plugin` - [License](https://github.com/allegro/axion-release-plugin/blob/master/LICENSE)\n- `Kotlin Gradle Plugin` - [License](https://github.com/JetBrains/kotlin#license)\n- `Android Gradle Plugin` - [License](https://developer.android.com/license)\n- `Detekt` - [License](https://github.com/arturbosch/detekt/blob/master/LICENSE)\n","funding_links":[],"categories":["Kotlin"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fusefulness%2Fproject-starter","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fusefulness%2Fproject-starter","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fusefulness%2Fproject-starter/lists"}