mirror of
https://github.com/lancedb/lancedb.git
synced 2026-11-13 14:16:54 +00:00
## Summary Java publishing has failed since `v0.42.0-beta.10` because the `lancedb` Sonatype org hit Maven Central's monthly release-count limit: ```text Publishing blocked: your organization has reached its monthly release count limit. Grace period ended 2026-11-08. Usage resets 2026-12-01. ``` This sends beta tags to `https://maven.fury.io/lancedb/` instead, matching how Python publishes betas to `pypi.fury.io/lancedb`. Stable releases still go to Maven Central. ```text tag contains "beta" -> setup-java server "fury" -> mvn deploy -P deploy-to-fury otherwise -> setup-java server "ossrh" -> mvn deploy -P deploy-to-ossrh ``` - `java/pom.xml`: new `deploy-to-fury` profile that points `distributionManagement` at Fury. - `java/README.md`: explains how to add the Fury and `maven.lance.org` repositories to use a beta. Requires a `FURY_TOKEN` secret with push access to the `lancedb` Fury account. The token is passed as the Maven username with a placeholder password. That follows Gemfury's convention but hasn't been tested against Fury yet. ## Evidence Running the beta path locally (`deploy -pl lancedb-core -am -P deploy-to-fury`) against a file repository deployed `lancedb-parent` (POM) and `lancedb-core` (JAR, POM, sources, javadoc). `help:effective-pom -P deploy-to-fury` resolves the release repository to `https://maven.fury.io/lancedb/`. ## Merge Risk **Door:** Two-way. This only changes where future betas are published; reverting the workflow restores Central publishing. **Blast Radius:** `release-ci`. Beta consumers need the extra repository; stable consumers are unaffected. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
126 lines
3.5 KiB
Markdown
126 lines
3.5 KiB
Markdown
# LanceDB Java Enterprise Client
|
|
|
|
## Installation
|
|
|
|
Stable releases of `com.lancedb:lancedb-core` are published to Maven Central.
|
|
|
|
Beta releases are published to `https://maven.fury.io/lancedb/` instead. They
|
|
depend on Lance beta releases, which are published to `https://maven.lance.org`.
|
|
To use a beta, add both repositories alongside Maven Central:
|
|
|
|
```xml
|
|
<repositories>
|
|
<repository>
|
|
<id>lancedb</id>
|
|
<url>https://maven.fury.io/lancedb/</url>
|
|
</repository>
|
|
<repository>
|
|
<id>lance</id>
|
|
<url>https://maven.lance.org</url>
|
|
</repository>
|
|
</repositories>
|
|
```
|
|
|
|
For Gradle:
|
|
|
|
```kotlin
|
|
repositories {
|
|
mavenCentral()
|
|
maven { url = uri("https://maven.fury.io/lancedb/") }
|
|
maven { url = uri("https://maven.lance.org") }
|
|
}
|
|
```
|
|
|
|
Use an explicit version, including the full `-beta.N` suffix. Beta versions are
|
|
Maven releases, not `SNAPSHOT` versions.
|
|
|
|
## Configuration and Initialization
|
|
|
|
### LanceDB Cloud (legacy)
|
|
|
|
For LanceDB Cloud, the legacy hosted service, use the simplified builder API:
|
|
|
|
```java
|
|
import com.lancedb.LanceDbNamespaceClientBuilder;
|
|
import org.lance.namespace.LanceNamespace;
|
|
|
|
// If your DB url is db://example-db, then your database here is example-db
|
|
LanceNamespace namespaceClient = LanceDbNamespaceClientBuilder.newBuilder()
|
|
.apiKey("your_lancedb_cloud_api_key")
|
|
.database("your_database_name")
|
|
.build();
|
|
```
|
|
|
|
### LanceDB Enterprise
|
|
|
|
For LanceDB Enterprise deployments, use your custom endpoint:
|
|
|
|
```java
|
|
LanceNamespace namespaceClient = LanceDbNamespaceClientBuilder.newBuilder()
|
|
.apiKey("your_lancedb_enterprise_api_key")
|
|
.database("your_database_name")
|
|
.endpoint("<your_enterprise_endpoint>")
|
|
.build();
|
|
```
|
|
|
|
## RTE write path
|
|
|
|
Most table operations reach LanceDB through the `LanceNamespace` above, which is
|
|
generated from the Lance Namespace specification. The RTE LSM routes are not part
|
|
of that specification, so they are issued through a separate client:
|
|
|
|
```java
|
|
import com.lancedb.LanceDbRestClient;
|
|
import com.lancedb.LanceDbTableRTE;
|
|
import com.lancedb.RTEWriteSpec;
|
|
|
|
LanceDbRestClient client = LanceDbNamespaceClientBuilder.newBuilder()
|
|
.apiKey("your_lancedb_cloud_api_key")
|
|
.database("your_database_name")
|
|
.buildRestClient();
|
|
|
|
LanceDbTableRTE rte = new LanceDbTableRTE(client, "my_table");
|
|
|
|
// Route future merge_insert upserts through the RTE, hash-bucketed by `id`.
|
|
rte.enableRTE(RTEWriteSpec.bucket("id", 16));
|
|
|
|
// ... merge_insert traffic ...
|
|
|
|
// Converge the fresh tier into the base table.
|
|
rte.checkpointRTE();
|
|
|
|
// Inspect live per-table-shard state.
|
|
rte.getRTEStats().ifPresent(stats -> stats.tableShards().forEach(tableShard ->
|
|
System.out.println(tableShard.shardId() + ": " + tableShard.sstables().size() + " SSTables")));
|
|
|
|
client.close();
|
|
```
|
|
|
|
`maintainedIndexes` is tri-state, and the null default is the opposite of what a Java
|
|
reader usually expects:
|
|
|
|
| Value | Meaning |
|
|
| --- | --- |
|
|
| unset (null) | Maintain **every** index the table has, including ones created later |
|
|
| `Collections.emptyList()` | Maintain **none** |
|
|
| `Arrays.asList("id_idx")` | Maintain exactly those |
|
|
|
|
## Development
|
|
|
|
The parent POM includes `https://maven.lance.org` to resolve Lance beta and RC
|
|
dependencies. Use an explicit `lance-core.version`; numbered beta and RC versions
|
|
are Maven releases, not snapshots. Maven Central remains available for stable
|
|
and historical versions, as well as other dependencies.
|
|
|
|
Build:
|
|
|
|
```shell
|
|
./mvnw install -pl lancedb-core -am
|
|
```
|
|
|
|
Run tests:
|
|
|
|
```shell
|
|
./mvnw test -pl lancedb-core
|
|
```
|