# Changelog ## 3.0.0 ### Breaking changes - **CLI is now an optional extra** -- The command-line tool's dependencies (rich, click, rich-click) are no longer installed by default. Use `pip install jgo[cli]` to include them. Plain `pip install jgo` gives you the Python library only. - **Removed deprecated jgo 1.x API** -- The following, deprecated since 2.0.0, are gone: - `jgo.main()`, `jgo.main_from_endpoint()`, `jgo.resolve_dependencies()` -- use `jgo.run()`, `jgo.build()`, `jgo.resolve()` instead - `jgo/jgo.py` compatibility shim and `jgo.util.compat` module - Deprecated CLI flags (`-U`/`--force-update`, `-a`/`--additional-jars`, `--additional-endpoints`, `--link-type`, `--log-level`) ### New features - **Maven metadata TTL cache** -- `Project.update(max_age=N)` skips HTTP fetches for metadata files younger than N seconds, reducing unnecessary network traffic. - **Rate-limit handling** -- HTTP 429 and 529 responses are retried automatically, honoring `Retry-After` headers. - **`Artifact.last_modified()`** -- Returns the deployment timestamp from the remote repository. Handles Nexus v3 correctly by using its REST API when the standard `Last-Modified` header would give the wrong value. - **PEP 561 compliance** -- Added `py.typed` marker so downstream type checkers recognize jgo's inline type annotations. --- ## 2.2.0 ### New features - **`JavaSource.DOWNLOAD` mode** -- Forces a fresh JDK download via cjdk, bypassing any cached or system Java. Useful for reproducible CI environments. --- ## 2.1.3 ### Bug fixes - **Maven `relativePath` handling removed** -- Resolving POMs with `` entries caused incorrect resolution in some cases; the field is now ignored during resolution, matching Maven's behavior for remote artifacts. --- ## 2.1.2 ### Improvements - **Auto Java mode tuning** -- Improved heuristics for selecting a system Java vs. downloading one via cjdk, with clearer logging when the decision is made. --- ## 2.1.1 ### Bug fixes - **Windows path normalization** -- Metadata URL paths were constructed with backslashes on Windows, causing HTTP 404s. Now normalized to forward slashes. - **`RELEASE` version resolution** -- Fixed incorrect resolution of the `RELEASE` pseudo-version in some repository configurations. ### Other changes - Require Python 3.10+. --- ## 2.1.0 ### New features - **Custom resolver injection** -- `jgo.build()` now accepts a `resolver=` argument, letting callers supply their own `Resolver` instance instead of constructing one internally. ### Bug fixes - **Platform auto-detection** -- `None` platform values are now resolved to the current platform rather than propagated as null, fixing profile activation on some systems. --- ## 2.0.1 ### Bug fixes - **Exclusions not applied** -- Exclusions declared in `jgo.toml` were parsed but silently ignored during resolution. They are now correctly applied. - **`jgo.toml` validation** -- Basic structure validation is now performed when loading a spec file, giving a clear error on malformed input instead of a confusing traceback. --- ## 2.0.0 jgo 2 is a major rewrite with a new architecture, new CLI, and new Python API. It tries to maintain backward compatibility with jgo 1.x -- existing scripts and code should continue to work with deprecation warnings. ### New features - **Command-based CLI** -- Modern subcommand interface (`jgo run`, `jgo init`, `jgo add`, `jgo list`, `jgo tree`, `jgo info`, `jgo search`, `jgo config`, etc.) following conventions from tools like `uv`, `cargo`, and `npm`. The `jgo ` shorthand syntax still works. - **jgo.toml project files** -- Reproducible environments with lock files, similar to `package.json` + `package-lock.json`. Create with `jgo init`, manage with `jgo add`/`jgo remove`, sync with `jgo sync`. - **Pure Python dependency resolver** -- Resolve Maven dependencies without a Maven installation. Handles transitive dependencies, property interpolation, dependency management (BOMs), exclusions, and scopes. - **Automatic Java management** -- Zero-configuration execution: jgo detects the minimum Java version from bytecode and downloads it on demand via [cjdk](https://github.com/cachedjdk/cjdk). - **Three-layer architecture** -- Independently useful layers for Maven resolution (`jgo.maven`), environment materialization (`jgo.env`), and Java execution (`jgo.exec`). - **High-level Python API** -- `jgo.run()`, `jgo.build()`, `jgo.resolve()` for simple programmatic usage. - **Artifact search** -- `jgo search` queries Maven Central (and configured repositories) for artifacts. - **Rich terminal output** -- Color, progress bars, and formatted tables via [Rich](https://github.com/Textualize/rich). - **JVM tuning flags** -- `--max-heap`, `--min-heap`, `--gc` for convenient JVM configuration. - **Platform-aware profile activation** -- `--platform`, `--os-name`, `--os-arch` flags for Maven profile activation. - **XDG config support** -- Settings file at `~/.config/jgo.conf` (XDG standard), with `~/.jgorc` still supported for backward compatibility. ### Breaking changes - **Default cache directory** changed from `~/.jgo` to `~/.cache/jgo`. Override with `--cache-dir` or `JGO_CACHE_DIR`. - **`-u` flag behavior** -- Now checks remote repositories (the old `-U` behavior). For the old `-u` behavior (local rebuild only), use `-u --offline`. ### Deprecated - `jgo.main()`, `jgo.main_from_endpoint()`, `jgo.resolve_dependencies()` -- use `jgo.run()`, `jgo.build()`, `jgo.resolve()` instead. - `-U`/`--force-update`, `-a`/`--additional-jars`, `--additional-endpoints`, `--link-type`, `--log-level` flags -- see {doc}`migration` for replacements. Deprecated APIs were removed in jgo 3.0.