Jon, Thanks for the insight. I was not aware (or had forgotten) that the classpath is also searched for source files. Reading the javac man page, it seems like I could also use -implicit:none (I confirmed this works). Is that somehow better/cleaner than an empty source path? Of course, since I control creation of the synthetic jars, I should really just put the sources into a separate zip (a la src.zip in the jdk).
-Doug > On 9 Mar 2017, at 02:17, Jonathan Gibbons <jonathan.gibb...@oracle.com> wrote: > > Doug, > > The jar files in your example contain source code; therefore javac is not so > much copying the contents of the classpath to the output directory as it is > compiling the source it is finding. > > Two experiments for you. > > 1. > > $ unzip -l jdk.internal.vm.ci.jar | sort -k 4 | head -n 20 > --------- ------- > 1710248 444 files > Archive: jdk.internal.vm.ci.jar > --------- ---------- ----- ---- > 990 2017-03-07 15:27 jdk/vm/ci/aarch64/AArch64$1.class > 7936 2017-03-07 15:27 jdk/vm/ci/aarch64/AArch64.class > 1607 2017-03-07 15:27 jdk/vm/ci/aarch64/AArch64$CPUFeature.class > 1212 2017-03-07 15:27 jdk/vm/ci/aarch64/AArch64$Flag.class > 10478 2017-03-07 15:27 jdk/vm/ci/aarch64/AArch64.java > 1414 2017-03-07 15:27 jdk/vm/ci/aarch64/AArch64Kind$1.class > 4121 2017-03-07 15:27 jdk/vm/ci/aarch64/AArch64Kind.class > 3833 2017-03-07 15:27 jdk/vm/ci/aarch64/AArch64Kind.java > 980 2017-03-07 15:27 jdk/vm/ci/amd64/AMD64$1.class > 9034 2017-03-07 15:27 jdk/vm/ci/amd64/AMD64.class > 2931 2017-03-07 15:27 jdk/vm/ci/amd64/AMD64$CPUFeature.class > 1161 2017-03-07 15:27 jdk/vm/ci/amd64/AMD64$Flag.class > 11763 2017-03-07 15:27 jdk/vm/ci/amd64/AMD64.java > 2207 2017-03-07 15:27 jdk/vm/ci/amd64/AMD64Kind$1.class > 5333 2017-03-07 15:27 jdk/vm/ci/amd64/AMD64Kind.class > 5384 2017-03-07 15:27 jdk/vm/ci/amd64/AMD64Kind.java > > 2. In your example, set the sourcepath to be empty. That will force javac to > look for source files on the sourcepath (where it won't find any), and only > look for class files on the classpath. > > $ rm -rf bin > $ sh run.sh > $ find bin > bin > bin/org > bin/org/graalvm > bin/org/graalvm/compiler > bin/org/graalvm/compiler/api > bin/org/graalvm/compiler/api/runtime > bin/org/graalvm/compiler/api/runtime/GraalRuntime.class > bin/org/graalvm/compiler/api/runtime/GraalJVMCICompiler.class > $ > > -- Jon > > > On 03/07/2017 10:11 AM, Doug Simon wrote: >> Hi Jon, >> >> I've attached bug.zip which should reproduce the issue (assuming jdk 9 javac >> is on your path): >> >> unzip bug.zip >> cd bug >> ./run.sh >> find bin >> >> The last command above should show the extra class files from >> jdk.internal.vm.ci.jar in bin. >> >> -Doug >> >> >> >> >>> On 7 Mar 2017, at 18:55, Jonathan Gibbons <jonathan.gibb...@oracle.com> >>> wrote: >>> >>> >>> >>> On 03/07/2017 08:06 AM, Doug Simon wrote: >>> >>>> To be able to develop Graal on JDK 9, we're using the `--release 8` javac >>>> option and providing jar files for API that is either not in 9 or is not >>>> exported in 9. Here is a simplified form of a javac command: >>>> >>>> javac -cp jdk.internal.vm.ci.jar:jdk.unsupported_sun.misc.Unsafe.jar -d >>>> bin/ --release 8 >>>> graal/org.graalvm.compiler.api.runtime/src/org/graalvm/compiler/api/runtime/*.java >>>> >>>> where: >>>> >>>> dsimon@kurz-3 ~/h/graal-core> ls >>>> graal/org.graalvm.compiler.api.runtime/src/org/graalvm/compiler/api/runtime/*.java >>>> graal/org.graalvm.compiler.api.runtime/src/org/graalvm/compiler/api/runtime/GraalJVMCICompiler.java >>>> graal/org.graalvm.compiler.api.runtime/src/org/graalvm/compiler/api/runtime/GraalRuntime.java >>>> >>>> I expect 2 class files to be written to bin/. However, I see a number of >>>> files from jdk.internal.vm.ci.jar in bin: >>>> >>>> dsimon@kurz-3 ~/h/graal-core> jar tf jdk.internal.vm.ci.jar | wc -l >>>> 444 >>>> dsimon@kurz-3 ~/h/graal-core> find bin/jdk/vm/ci | wc -l >>>> 55 >>>> >>>> I'm guessing that these are the classes in jdk.internal.vm.ci.jar >>>> referenced (transitively?) from the Graal sources. >>>> >>>> Why is this happening? That is, why is javac extracting classes from a jar >>>> on the classpath and putting them in the output directory? >>>> >>>> -Doug >>>> >>> Doug, >>> >>> Can you provide a more complete test case? >>> >>> -- Jon >>> >