{"id":19898387,"url":"https://github.com/gui-yom/jcargo","last_synced_at":"2025-07-11T21:36:16.361Z","repository":{"id":62441283,"uuid":"411020448","full_name":"Gui-Yom/jcargo","owner":"Gui-Yom","description":"Trying to remake Rust's excellent build tool for the JVM ecosystem.","archived":false,"fork":false,"pushed_at":"2024-03-18T11:35:06.000Z","size":238,"stargazers_count":9,"open_issues_count":1,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-07-06T10:44:07.345Z","etag":null,"topics":["build","build-tool","java","jvm","kotlin"],"latest_commit_sha":null,"homepage":"","language":"Rust","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/Gui-Yom.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE-APACHE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2021-09-27T19:41:01.000Z","updated_at":"2024-10-17T21:07:35.000Z","dependencies_parsed_at":"2022-11-01T22:01:55.671Z","dependency_job_id":null,"html_url":"https://github.com/Gui-Yom/jcargo","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/Gui-Yom/jcargo","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Gui-Yom%2Fjcargo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Gui-Yom%2Fjcargo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Gui-Yom%2Fjcargo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Gui-Yom%2Fjcargo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Gui-Yom","download_url":"https://codeload.github.com/Gui-Yom/jcargo/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Gui-Yom%2Fjcargo/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":264903864,"owners_count":23681134,"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","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":["build","build-tool","java","jvm","kotlin"],"created_at":"2024-11-12T19:04:12.915Z","updated_at":"2025-07-11T21:36:16.346Z","avatar_url":"https://github.com/Gui-Yom.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# jcargo\n\nAn attempt at making an equivalent to Rust's excellent build tool for the JVM ecosystem.\n\n## Motivations\n\nMaven is awful, who wants to write xml. Gradle is a step in the right direction, but you need a\ndegree to use it (and it requires a damn daemon to hide the fact that it is painfully slow).\n\nJcargo doesn't run on the JVM, it doesn't suffer long boot times (essential for a CLI). It comes\nwith another project of mine : https://github.com/Gui-Yom/native-jdktools, an attempt at compiling\nthe jdk tools (javac, javadoc, jar ...) with GraalVM to improve boot times.\n\nJcargo is configured from a single `jcargo.toml` file that is simple to write and read. It follows\nthe principle of \"Simple and efficient enough for 90% of use cases\", for the remaining 10% we may\nneed a build script or something (to be explored later).\n\nFor 90% of use cases, you just need to bootstrap a project that pulls up some dependencies without\nany special processing of any sort.\n\n## Current state\n\nThe project is very far from being usable in practice on anything real. It can successfully compile\nprojects without any dependencies tho.\n\n## Installation\n\n### Downloading a prebuilt binary\n\nSee the [Releases](https://github.com/Gui-Yom/jcargo/releases) page.\n\n### Building from source\n\nRequires at least `Rust 1.56`.\n\n#### From crates.io (published version)\n\n```shell\ncargo install jcargo\n```\n\n#### From master branch\n\n```shell\ngit clone https://github.com/Gui-Yom/jcargo\ncd jcargo\ncargo install --path .\n```\n\n## Runtime\n\nFor now, `JDK_HOME/bin` must be in your path for jcargo to find the jdk tools. If you want to\ncompile kotlin sources, set `KOTLINC_HOME` to point to the installation directory of kotlinc.\n\n### Using native-jdktools\n\nIf using native-jdktools, please set `NATIVE_JDKTOOLS` to point to the native-jdktools executable.\nPlease also set `JDKTOOLS_HOME` to a jdk home directory.\n\n## Configuration\n\nConfiguration is definitely not frozen. I particularly don't like how dependencies are specified.\nExample :\n\n```toml\ngroup = \"marais\"\nartifact = \"testproject\"\nversion = \"0.1.0\"\n\n[dependencies]\n# Compile and runtime dependencies\ncompileRuntime = [\n    \"org.apache.logging.log4j:log4j-api:2.17.1\"\n]\n# Runtime only dependencies\nruntime = [\n    { group = \"org.apache.logging.log4j\", artifact = \"log4j-core\", version = \"2.17.1\" }\n]\n# Compile only\ncompile = []\ntransitive = []\n\n[[entrypoints]]\nclass = \"Main\"\n\n[[entrypoints]]\nname = \"Other\"\nclass = \"OtherMain\"\n```\n\n## Design\n\nRead [some of the designs](DESIGN.md) of jcargo.\n\n## Roadmap for 1.0\n\n- [x] means a feature is partially implemented, not completely finished\n- [ ] means a feature is completely absent\n\n\n- [x] Project model, configuration and management\n    * [ ] Stable configuration model (TOML)\n    * [x] Project initialization (jcargo init)\n        - [x] Create an initial configuration file\n    * [x] Project cleanup (jcargo clean)\n        - [x] Delete the `target` dir\n    * [x] Consistency check (jcargo check)\n        - [ ] Verify configuration file\n        - [x] Download dependencies\n        - [ ] Check dependencies versions\n    * [ ] Dependency handling\n        - [x] Standard maven binary repositories\n            * [x] Maven pom parsing\n            * [x] Recurse and merge poms\n            * [x] Download full dependency tree\n            * [ ] Gradle metadata ?\n        - [ ] Custom binary repositories\n        - [ ] Git dependencies (project made with jcargo)\n        - [ ] Local dependency (project made with jcargo)\n        - [x] Dependency caching\n            * [x] Cache pom and jar\n            * [ ] Cache maven metadata\n            * [ ] Cache dependency graph resolution\n            * [ ] Verify file hashes\n    * [ ] Multiple source sets\n        - [ ] Main\n        - [ ] Tests\n        - [ ] Examples\n        - [ ] Benchmarks ?\n        - [ ] Per source set dependencies\n    * [ ] Multi-modules builds\n        - [ ] Inter modules dependencies\n- [x] Java support\n    * [x] Compilation\n    * [x] Javadoc generation\n    * [ ] Annotation processing\n    * [ ] Toolchain handling\n        - [ ] Handle source and target versions\n        - [ ] Handle multiple jdk installations\n- [x] Kotlin support\n    * [x] JVM Compilation support\n    * [ ] Kdoc generation\n    * [ ] Annotation processing\n    * [ ] Toolchain handling\n        - [ ] Handle source and target versions\n        - [ ] Handle multiple kotlinc and jdk installations\n- [x] Packaging\n    * [x] Application jar\n    * [x] Documentation jar\n    * [x] Sources jar\n    * [ ] Sources tarball\n    * [x] Resources handling\n    * [ ] Dependency vendoring options\n    * [ ] Publishing to binary repositories\n        - [ ] Maven's POM generation\n        - [ ] Gradle Module metadata generation\n        - [ ] Remote repository publication\n- [ ] IDE Support\n    * [ ] IntelliJ IDEA integration\n        - [ ] Configuration file support\n        - [ ] Full classpath support\n\n## Other ideas\n\n- Error messages processing, beautify javac error messages for command line use.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgui-yom%2Fjcargo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgui-yom%2Fjcargo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgui-yom%2Fjcargo/lists"}