Тип org.objectweb.asm.ClassVisitor не может быть разрешен. На него косвенно ссылаются необходимые файлы .class - PullRequest
0 голосов
/ 18 января 2019

Я использую ASM 7.0 в коротком проекте Java 11, который преобразует файл класса в текст, используя следующий код:

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 в уже скомпилированном проекте. Это было относительно легко исправить, но здесь я не знаю как.

...