This file gives repository-specific instructions for agents working in this repo.
AGENTS.md is added later.xtable-api: shared public interfaces and SPI contracts.xtable-core: core conversion logic, sync flow, and common implementation code.xtable-hudi-support: Hudi-specific support modules, including shaded extensions under xtable-hudi-support-extensions.xtable-utilities: bundled CLI and shaded distribution jar.xtable-aws: AWS-related shaded support dependencies.xtable-hive-metastore: Hive Metastore shaded support dependencies.xtable-service: service-layer code.release/scripts: release and compliance automation, including shaded license tooling.spec and rfc: design docs and proposal material.website: project site content.When changing code, prefer to work in the narrowest module that owns the behavior. If a change crosses module boundaries, verify all affected modules instead of only the top-level caller.
Use Java 11 for local Maven work.
Common commands:
./mvnw test ./mvnw verify ./mvnw spotless:check ./mvnw spotless:apply
Prefer targeted commands while iterating:
./mvnw -pl <module[,module...]> test ./mvnw -pl <module[,module...]> verify ./mvnw -pl <module[,module...]> -Dtest=<TestClass> test
Test control flags wired in the root pom.xml:
-DskipTests skips both unit and integration tests.-DskipUTs skips surefire unit tests only.-DskipITs skips failsafe integration tests only.Validation expectations:
./mvnw spotless:check and use ./mvnw spotless:apply if needed.When adding, removing, or upgrading a dependency, always follow this sequence:
pom.xml dependency declarations.maven-shade-plugin, regenerate the runtime dependency tree and keep the shade <artifactSet><includes> list aligned to runtime dependencies only.Do not stop after updating the Maven dependency declaration alone.
Modules with maven-shade-plugin must use explicit <artifactSet><includes> entries.
Rules:
dependency:tree -Dscope=runtime output.provided or test dependencies.Current shaded modules include:
xtable-awsxtable-hive-metastorextable-hudi-support/xtable-hudi-support-extensionsxtable-utilitiesxtable-utilities is intentionally skipped by release/scripts/validate_shaded_license_coverage.sh while it is not published. Keep its bundled metadata useful for local builds, but do not treat it as release-blocking until that artifact is published.
Generate runtime dependency trees for changed shaded modules:
./mvnw -pl <module[,module...]> -am -DskipTests dependency:tree -Dscope=runtime -DoutputType=text -DoutputFile=target/dependency-tree-runtime.txt
Regenerate bundled license metadata:
python3 release/scripts/generate_shaded_license_metadata.py
Validate shaded dependency license coverage and ASF license-family compliance:
release/scripts/validate_shaded_license_coverage.sh
If only one or two modules changed, prefer targeted Maven verification:
./mvnw -pl <module[,module...]> -am -DskipTests dependency:tree -Dscope=runtime -DoutputType=text -DoutputFile=target/dependency-tree-runtime.txt
If broader confidence is needed, run:
./mvnw clean install -ntp -B
Shaded modules must keep these files current:
src/main/resources/META-INF/LICENSE-bundledsrc/main/resources/META-INF/NOTICE-bundledDo not manually rewrite large dependency/license sections unless necessary. Prefer regenerating with:
python3 release/scripts/generate_shaded_license_metadata.py
Notes:
Pull requests are expected to pass:
.github/workflows/mvn-ci-build.yml.github/workflows/mvn-license-check.ymlThe license workflow runs:
./mvnw apache-rat:check -Brelease/scripts/validate_shaded_license_coverage.shIf you change dependency behavior, assume this workflow must still pass.
For non-dependency changes, expect the main Maven CI workflow to be the baseline bar. If you touch release scripts or contributor automation, also sanity-check the affected scripts locally when practical.
src/main/resources and src/test/resources when behavior depends on bundled configs or sample files.verify for the affected module set.spotless:check if Java formatting may have changed.python3 release/scripts/generate_shaded_license_metadata.py run.release/scripts/validate_shaded_license_coverage.sh run successfully.