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/native → lib/jansi-native, whose <include>**</include> matches directories as well as files;
- the
src/lib → lib 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.
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.Two fileSets in
apache-maven/src/main/assembly/component.xmlboth materialise that directory:target/dependency/org/fusesource/jansi/internal/native→lib/jansi-native, whose<include>**</include>matches directories as well as files;src/lib→libfileSet, which carriesapache-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:
That blocks mvnd's
mvnd-1.xbranch 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,**/*.dllpatterns, 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/nativeis 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.