On Thu, 17 Jun 2021 18:12:19 GMT, Aleksei Voitylov <avoity...@openjdk.org> wrote:
>> test/jdk/java/lang/ClassLoader/loadLibraryDeadlock/TestLoadLibraryDeadlock.java >> line 95: >> >>> 93: Collections.addAll(args, "cvf", Paths.get(testClassPath, >>> outputJar).toString()); >>> 94: for (String c : classes) { >>> 95: Collections.addAll(args, "-C", testClassPath, c); >> >> I believe only one single `-C` option is good enough for this case since the >> classes are all in one single directory. > > Contrary to the man which says "-C DIR Changes the specified directory and > includes the files specified at the end of the command line.", here is how it > works: > > > bash-3.2$ find . > . > ./dir > ./dir/B.class > ./dir/A.class > bash-3.2$ jar cvf a.jar -C dir A.class B.class > B.class : no such file or directory > added manifest > adding: A.class(in = 176) (out= 149)(deflated 15%) > > > and no jar is produced. Lines 614 and 647 of > src/jdk.jartool/share/classes/sun/tools/jar/Main.java explain why. IIRC the > intent was to mimic tar -C behaviour where -C applies to all files that > follow, but jar does not work that way currently. > > It's probably worth reaching consensus that it's a problem worth fixing first > (a scary one to fix by the way, provided how many tools could rely on the > current behaviour). Alternatively, man could be adjusted to reflect the > current order. I could work on that as a follow up. You are probably right. I have no more comment. ------------- PR: https://git.openjdk.java.net/jdk/pull/3976