hawk9821 commented on PR #9993:
URL: https://github.com/apache/seatunnel/pull/9993#issuecomment-4665646561
@DanielLeens
Thanks for the thorough re-review. This is intentional, not an oversight.
### Why k8s E2E uses an unversioned jar name
The k8s E2E path uses `seatunnel-shade-hadoop3-uber.jar` (no version) by
design. The reason is a hard constraint from Docker:
```
Dockerfile COPY cannot access the host's ~/.m2/repository
→ jar must be pre-copied into the Docker build context before `docker build`
→ renamed to a stable, unversioned filename so the Dockerfile doesn't need
to change per release
```
The flow:
```
Maven local repo
seatunnel-shade-hadoop3-uber-3.1.4-3.0.0.jar
↓ test code copies & renames
Docker build context
seatunnel-shade-hadoop3-uber.jar
↓ Dockerfile COPY
Container image
/opt/seatunnel/lib/seatunnel-shade-hadoop3-uber.jar
```
### Why this is a feature, not a bug
| Consumer | Mechanism | Jar name | Impact of version bump |
|----------|-----------|----------|----------------------|
| Docs | User manually downloads |
`seatunnel-shade-hadoop3-uber-3.1.4-3.0.0.jar` | User follows docs to download
the right version |
| Maven helper (MavenJarUtil) | Resolves from Maven local repo |
`seatunnel-shade-hadoop3-uber-3.1.4-3.0.0.jar` | Code change needed when
version changes |
| k8s E2E | Pre-copied into Docker build context |
`seatunnel-shade-hadoop3-uber.jar` | **No change needed** — only the Maven
coordinate in pom.xml changes |
The unversioned name in k8s E2E is a **stable abstraction** that insulates
the Dockerfile and container image from Maven artifact version changes. When
seatunnel-shade publishes a new version (e.g., 3.0.1), only the `<version>` in
the test pom needs updating — the Dockerfile, the container path, and the k8s
test code remain unchanged.
### The public-facing contract
The user-facing contract is the **versioned Maven artifact name**
(`seatunnel-shade-hadoop3-uber-3.1.4-3.0.0.jar`), which is what the docs
consistently reference. The unversioned name is an internal implementation
detail of the k8s E2E test infrastructure, not exposed to users.
### Documentation omission fixed
The previous documentation omission regarding this design has been fixed.
The k8s E2E naming is intentionally designed as described above — it is not an
oversight, but a deliberate choice to accommodate Docker build constraints
while keeping the Dockerfile version-agnostic.
### Summary
Both naming contracts are correct for their respective consumers:
- **Versioned name** → docs, Maven helper, normal E2E (testcontainers can
resolve Maven coordinates directly)
- **Unversioned name** → k8s E2E (Dockerfile cannot access Maven local repo,
needs a stable filename in build context)
This is the same pattern used by any project that packages Maven artifacts
into Docker images — the image uses a stable filename, the build pipeline
resolves the versioned artifact and copies it in.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]