无法解析类型org.objectweb.asm.ClassVisitor。从所需的.class文件间接引用它

时间:2019-01-17 23:02:19

标签: java java-bytecode-asm java-11 java-module eclipse-2018-12

我正在一个简短的Java 11项目中使用ASM 7.0,该项目使用以下代码将类文件转换为文本:

final var charset = StandardCharsets.UTF_8;
final ByteArrayOutputStream bos = new ByteArrayOutputStream();
try (var pw = new PrintWriter(bos, false, charset)) {
  final org.objectweb.asm.ClassVisitor traceClassVisitor = new TraceClassVisitor(null,
      new org.objectweb.asm.util.Textifier(), new PrintWriter(bos));
  new ClassReader(stream.getStream()).accept(traceClassVisitor,
      ClassReader.SKIP_DEBUG | ClassReader.SKIP_CODE | ClassReader.SKIP_FRAMES);
}

这可行,但是Eclipse有时会产生错误:无法解析类型org.objectweb.asm.ClassVisitor。它是从所需的.class文件中间接引用的。清理并编译可解决此问题。

使用Maven 3.6.0 + Java 11构建时,没有此类错误。

我的module-info.java是:

module stackoverflow.asm {
  exports stackoverflow.asm;
  // requires ransitive org.objectweb.asm;
  // requires transitive org.objectweb.asm.tree;
  requires transitive org.objectweb.asm.util;
  // requires transitive org.objectweb.asm.tree.analysis;
  uses java.nio.file.spi.FileSystemProvider;
}

在Maven中,我具有以下依赖关系:

<dependencies>
  <dependency>
    <groupId>org.ow2.asm</groupId>
    <artifactId>asm</artifactId>
    <version>7.0</version>
  </dependency>
  <dependency>
    <groupId>org.ow2.asm</groupId>
    <artifactId>asm-util</artifactId>
    <version>7.0</version>
  </dependency>
</dependencies>

虽然我了解Eclipse报告的问题,但是org.objectweb.asm.util.Textifier需要类org.objectweb.asm.ClassVisitor,但是Eclipse在类路径中找不到它(或者我应该说模块路径吗?)。

这是Eclipse的错误(我正在使用最新的)还是我的module-info.java中缺少了某些内容?

注意:如上所述,我理解该错误;过去,在使用具有不良传递性或无依赖项的maven依赖项时,或者只是在已经编译的项目中卸载JDK时,我就已经有了它。这个相对容易解决,但是在这里我不知道怎么做。

0 个答案:

没有答案