根据https://github.com/google/guice/pull/1169#issuecomment -395095124,也许是时候停止对 ASM 进行着色了?
如果他们愿意的话,这将允许人们携带他们自己的 ASM 副本,并且当新版本的 JDK 出现并且 Guice 尚未更新时,他们将解除阻止。 我们显然会在我们的 maven pom 中为那些没有领先于游戏的人提供默认值。 随着 JDK 继续其 6 个月的发布节奏,这可能会有所帮助。
sgtm,我相信它被遮蔽的原因是因为从历史上看,asm 与以前的版本非常不兼容……但我认为他们在最近的版本中改变了这一点。
@mcculls的评论在这里也可能是相关的:
请注意,该构建已经生成了一个不捆绑 asm 或 cglib 的 Guice 版本:
http://repo1.maven.org/maven2/com/google/inject/guice/4.2.0/guice-4.2.0-classes.jar
这是在任何 JarJar'ing 之前的 Guice 类的 jar。
此外,如果您不需要 AOP,那么还有一个根本不使用 asm/cglib 的“no_aop”jar:
http://repo1.maven.org/maven2/com/google/inject/guice/4.2.0/guice-4.2.0-no_aop.jar
当新版本的 JDK 出现并且 Guice 尚未更新时,取消阻止它们
我认为不遮蔽 ASM 是不够的,因为 API 级别还需要更新以支持新的类文件版本:
我认为不遮蔽 ASM 是不够的,因为 API 级别还需要更新以支持新的类文件版本:[...]
而对于 Guice 中对 JDK11 的实验性支持,它只能使用实验性Opcodes.ASM7_EXPERIMENTAL
:[1]。
https://gitlab.ow2.org/asm/asm/blob/master/asm/src/main/java/org/objectweb/asm/Opcodes.java#L55
对于 Guice 中对 JDK11 的实验性支持,它只能使用实验性 Opcodes.ASM7_EXPERIMENTAL: [1]。
在此 PR #1203 中完成。 有了这个差异,Gerrit 可以使用 JDK11、Bazel 和 VanillaJavaBuilder 构建(https://gerrit-review.googlesource.com/c/gerrit/+/194040):
$ bazel build --host_javabase=:jdk11 --host_java_toolchain=//:toolchain_vanilla --java_toolchain=//:toolchain_vanilla //:release
[...]
INFO: Analysed target //:release (0 packages loaded).
INFO: Found 1 target...
Target //:release up-to-date:
bazel-bin/release.war
INFO: Elapsed time: 0.431s, Critical Path: 0.19s
顺便说一句:asm 6.2.1 可用
正如其他人所提到的,不着色 asm 实际上不会解决这个问题,因为代码需要更改(在 guice 和 cglib 中)以支持更新的 JDK 功能。
如果你在 asm7 发布的那天 ping 这个线程,我会尝试在同一天或第二天发布一个新的 cglib 和 guice(假设没有出现意外问题)。
@sameb太好了,谢谢! 我肯定会 ping 你 :smile:
Ping @sameb - ASM 7 出来了! 见https://github.com/google/guice/issues/1205#issuecomment -433649551
ASM 8.0.1可用。
最有用的评论
如果你在 asm7 发布的那天 ping 这个线程,我会尝试在同一天或第二天发布一个新的 cglib 和 guice(假设没有出现意外问题)。