Skip to content

Binary distribution tar contains a duplicate lib/jansi-native directory entry #12778

Description

@slachiewicz

The binary distribution tar for the 3.9.x line contains lib/jansi-native/ twice as a directory entry. It is the only duplicated path in the archive; no file entry is duplicated.

$ tar tvzf apache-maven-3.9.16-bin.tar.gz | grep -n 'jansi-native/$'
31:drwxr-xr-x  0 root root  0 May 13 23:36 apache-maven-3.9.16/lib/jansi-native/
53:drwxr-xr-x  0 root root  0 May 13 23:36 apache-maven-3.9.16/lib/jansi-native/

Two fileSets in apache-maven/src/main/assembly/component.xml both materialise that directory:

  • the native-library fileSet, target/dependency/org/fusesource/jansi/internal/nativelib/jansi-native, whose <include>**</include> matches directories as well as files;
  • the src/liblib fileSet, which carries apache-maven/src/lib/jansi-native/README.txt.

The ** include arrived with MNG-7254 (8c66edc); before that the fileSet did not exist.

Where it shows up

Consumers that unpack the distribution and reject duplicate archive paths cannot read it. provisio 2.0.0 added such a check, and apache/maven-mvnd#1694 fails on it:

java.io.IOException: Duplicate archive output path lib/jansi-native in
  ~/.m2/repository/org/apache/maven/apache-maven/3.9.16/apache-maven-3.9.16-bin.tar.gz

That blocks mvnd's mvnd-1.x branch from moving to provisio 2.0.0 at all, since every released 3.9.x and 3.8.x artifact carries the duplicate.

Scope

Present in 3.8.8, 3.9.9 and 3.9.16 — the earliest and latest I checked on those lines. Not present in 3.10.0-rc-1 or 4.0.0-rc-6: both have zero duplicate entries.

3.10.x is already correct, but by accident. The JLine migration (70d934d) replaced <include>**</include> with explicit **/*.so, **/*.jnilib, **/*.dll patterns, which match only files, so the fileSet no longer contributes a directory entry.

Fix

Apply the same include list on 3.9.x. It is lossless: every native file jansi 2.4.3 ships under internal/native is a .so (9), .jnilib (3) or .dll (3), so nothing currently packaged stops being packaged.

Older released artifacts keep the duplicate; nothing can be done about those. The fix only makes future 3.9.x releases readable by strict consumers.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingbuildPull requests that change the build processmvn3

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions