Closed ejona86 closed 6 years ago
:(
Sorry, the checker-qual
dependency was just to work around a bug in guava-gwt
. You can exclude it, but we really should have found another way. I hadn't thought about the Java 8 angle. Any idea how hard it is to exclude on your end while I figure things out?
It looks like I can fix this by moving checker-qual
to the test scope. I have an internal CL out for review.
Once we do a new Guava release and depend on that, I can remove it entirely.
And now when I run locally (before making other changes) I see:
Unable to stage app: Class file is Java 8 but max supported is Java 7: com/google/auto/value/extension/memoized/Memoized.class in /usr/local/google/home/ejona/clients/grpc-java/gae-interop-testing/gae-jdk7/build/exploded-grpc-gae-interop-testing-jdk7/WEB-INF/lib/auto-value-annotations-1.6.2.jar
It seems auto-value was upgraded from 1.5.3 to 1.6.2.
(I'm still working to exclude both, but I needed to document this in any case.)
Ah, I see. I've filed https://github.com/google/auto/issues/655 for that, and I'll see if I can put together a PR.
Excluding worked fine. grpc/grpc-java#4668. I think I tried that earlier in my debugging process, but not later, once I understood more of what was going on.
I would have wanted to file this issue anyway, so y'all were aware of the problem, so I guess no harm done. Thanks for filing the issue with google/auto; it's a bit hard to keep track of which libraries support which versions of Java.
I'm glad that it worked. Sorry for the trouble, and yes, thanks for letting us know.
Note to self: Don't rush to cut a new Truth release, since the AutoValue problem will still exist until they also do a release.
grpc-java runs tests on GAE Java 7 (which is deprecated and will be shut down in January 2019). When upgrading to 0.42 compilation fails because org.checkerframework:checker-qual is using Java 8 bytecode. The error message is (full log):
Truth 0.41 works. It seems a dependency on checkerframework was added in Truth 0.42. Pure is an annotation.
This is a bit interesting, because I sort of expect Truth may still run still fine on Java 7 in the normal case. It may just be an annotation, unused at runtime, that causes a problem. The GAE compiler is verifying things are safe and looking at the transitive dependencies, where normally unused classes are ignored.
Depending on Truth 0.41 is a bit dangerous, as it may prevent us from updating to new APIs necessary for an internal "global" cleanup. grpc/grpc-java#4655 was the trigger for this discovery.
It may be possible for us to remove usages of Truth in packages used by AppEngine, and still let the rest of our test code use Truth.
What are y'all's thoughts?
CC @zpencer, @carl-mastrangelo