{"id":29604853,"url":"https://github.com/lajoscseppento/ruthless","last_synced_at":"2026-04-16T10:02:09.942Z","repository":{"id":37021855,"uuid":"315136691","full_name":"LajosCseppento/ruthless","owner":"LajosCseppento","description":"Ruthless conventions for Gradle projects","archived":false,"fork":false,"pushed_at":"2023-10-17T20:16:14.000Z","size":373,"stargazers_count":1,"open_issues_count":14,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-07-20T16:02:04.581Z","etag":null,"topics":["conventions","defaults","dry","gradle","java","ruthless","spring","spring-boot","standards"],"latest_commit_sha":null,"homepage":"","language":"Java","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/LajosCseppento.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}},"created_at":"2020-11-22T21:35:01.000Z","updated_at":"2024-03-30T13:51:38.000Z","dependencies_parsed_at":"2024-11-15T09:35:07.666Z","dependency_job_id":"735ab7af-778e-461b-b744-612718f625b7","html_url":"https://github.com/LajosCseppento/ruthless","commit_stats":null,"previous_names":[],"tags_count":10,"template":false,"template_full_name":null,"purl":"pkg:github/LajosCseppento/ruthless","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LajosCseppento%2Fruthless","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LajosCseppento%2Fruthless/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LajosCseppento%2Fruthless/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LajosCseppento%2Fruthless/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/LajosCseppento","download_url":"https://codeload.github.com/LajosCseppento/ruthless/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LajosCseppento%2Fruthless/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31880883,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-16T09:23:21.276Z","status":"ssl_error","status_checked_at":"2026-04-16T09:23:15.028Z","response_time":69,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: 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":["conventions","defaults","dry","gradle","java","ruthless","spring","spring-boot","standards"],"created_at":"2025-07-20T16:00:50.879Z","updated_at":"2026-04-16T10:02:09.924Z","avatar_url":"https://github.com/LajosCseppento.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Ruthless\n\n[![Release](https://img.shields.io/github/v/release/LajosCseppento/ruthless?label=Release)](https://github.com/LajosCseppento/ruthless/releases/latest)\n[![Plugin Portal](https://img.shields.io/maven-metadata/v?label=Plugin%20Portal\u0026metadataUrl=https://plugins.gradle.org/m2/dev/lajoscseppento/ruthless/ruthless-plugin/maven-metadata.xml)](https://plugins.gradle.org/plugin/dev.lajoscseppento.ruthless)\n[![Maven Central](https://img.shields.io/maven-central/v/dev.lajoscseppento.ruthless/dev.lajoscseppento.ruthless.gradle.plugin.svg?label=Maven%20Central)](https://search.maven.org/search?q=g:%22dev.lajoscseppento.ruthless%22%20AND%20a:%22dev.lajoscseppento.ruthless.gradle.plugin%22)\n[![CI](https://github.com/LajosCseppento/ruthless/workflows/CI/badge.svg)](https://github.com/LajosCseppento/ruthless/actions)\n[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://www.apache.org/licenses/LICENSE-2.0)\n\nRuthless conventions for Gradle projects to keep them DRY. Inspired by `buildSrc` conventions\ngenerated by Gradle `init`. Selfishly tailored for my taste, sorry.\n\n\u003e If you are looking for a flexible way of sharing build logic between projects, without enforcing\n\u003e someone else's coding conventions and dependency versions, you might want to have a look at\n\u003e [Blowdryer](https://github.com/diffplug/blowdryer).\n\n## Features\n\n- `dev.lajoscseppento.ruthless` - multi-use plugin, can apply to init, settings or project\n- 5 plugins, choose the best fit:\n    - `dev.lajoscseppento.ruthless.java-application` - Java application\n    - `dev.lajoscseppento.ruthless.java-gradle-plugin` - Java Gradle Plugin\n    - `dev.lajoscseppento.ruthless.java-library` - Java library\n    - `dev.lajoscseppento.ruthless.spring-boot-application` - Spring Boot application\n    - `dev.lajoscseppento.ruthless.spring-boot-library` - Spring Boot library\n- Multi-project support\n- Lombok by default (it can be disabled via `ruthless.lombok`)\n- Default dependency versions for Guava, Lombok, Jackson, JUnit 5, Mockito, AssertJ... and more!\n- `dev.lajoscseppento.ruthless.logging` - logging conventions are also available as a standalone plugin\n\nFor examples see `ruthless-demo` and `ruthless-logging-demo`. For details, see the source code.\n\n## Usage\n\nFirst, create `gradle.properties`:\n\n```properties\ngroup=com.example\nversion=0.1.0-SNAPSHOT\n\norg.gradle.caching=true\norg.gradle.parallel=true\norg.gradle.configureondemand=true\n```\n\nThen, `settings.gradle.kts` to apply defaults. This will apply a base Ruthless plugin to all\nsubprojects (multi-project is not enforced, you can go with single-project if you like that\nsetup more):\n\n```kotlin\nplugins {\n    id(\"dev.lajoscseppento.ruthless\") version \"0.8.0\"\n}\n\nrootProject.name = \"my-project\"\ninclude(\n    \"my-project-app\",\n    \"my-project-lib\"\n)\n```\n\nThen in `build.gradle.kts` for each project, you can specify the project type to apply basic\nsetup (not obligatory):\n\n```kotlin\n// For a Java library:\nplugins {\n    id(\"dev.lajoscseppento.ruthless.java-library\")\n}\n\n// For a Spring Boot application\nplugins {\n    id(\"dev.lajoscseppento.ruthless.spring-boot-application\")\n}\n```\n\nSee `ruthless-demo` for a complete example.\n\n## Developing Ruthless\n\nRuthless is a standard Gradle plugin project.\n\nFor manual local testing, it is recommended to publish the plugin to the local Maven repository.\n\n```shell script\n./gradlew publishToMavenLocal\n```\n\nThen use the local snapshot in the demo project:\n\n```shell script\n# Full demo\ncd ruthless-demo\n../gradlew --init-script init-dev.gradle.kts ...\n\n# Logging-only demo\ncd ruthless-logging-demo\n../gradlew --init-script init-dev.gradle.kts ...\n```\n\n### Release Procedure\n\n1. Fix version, finalise change log\n2. Publish to Maven Central\n    1. Run `./gradlew publishToSonatype closeSonatypeStagingRepository`\n    2. Open https://oss.sonatype.org/#stagingRepositories\n    3. Inspect contents\n    4. Release\n3. Publish to Gradle Plugin Portal using `./gradlew publishPlugins`\n4. Bump version\n5. Upgrade to recently released version (`ruthless`, `ruthless-demo` and  `ruthless-logging-demo`)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flajoscseppento%2Fruthless","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flajoscseppento%2Fruthless","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flajoscseppento%2Fruthless/lists"}