Как я могу разрешить эту ошибку IllegalAccessError в org.mozilla.javascript.optimizer.BodyCodegen, запущенном на Heroku?

#java #javascript #heroku #rhino

#java #javascript #heroku #rhino

Вопрос:

Я погуглил повсюду и не нашел никаких ссылок на эту проблему, поэтому буду признателен за любую помощь.

Я могу регулярно генерировать ошибку незаконного доступа при использовании компилятора Java Less (https://github.com/marceloverdijk/lesscss-java ), но не на моей машине разработки — только на Heroku (и dokku, похоже, там та же проблема). Компилятор вызывает compile для некоторого кода javascript, который проходит через оптимизатор, и завершается ошибкой со следующей трассировкой стека:

 java.lang.IllegalAccessError: tried to access method org.mozilla.classfile.ClassFileWriter.getLabelPC(I)I from class org.mozilla.javascript.optimizer.BodyCodegen$ExceptionManager
    at org.mozilla.javascript.optimizer.BodyCodegen$ExceptionManager.endCatch(Codegen.java:4051)
    at org.mozilla.javascript.optimizer.BodyCodegen$ExceptionManager.removeHandler(Codegen.java:3952)
    at org.mozilla.javascript.optimizer.BodyCodegen.visitTryCatchFinally(Codegen.java:3705)
    at org.mozilla.javascript.optimizer.BodyCodegen.generateStatement(Codegen.java:1897)
    at org.mozilla.javascript.optimizer.BodyCodegen.generateStatement(Codegen.java:1873)
    at org.mozilla.javascript.optimizer.BodyCodegen.generateStatement(Codegen.java:1858)
    at org.mozilla.javascript.optimizer.BodyCodegen.generateBodyCode(Codegen.java:1289)
    at org.mozilla.javascript.optimizer.Codegen.generateCode(Codegen.java:306)
    at org.mozilla.javascript.optimizer.Codegen.compileToClassFile(Codegen.java:166)
    at org.mozilla.javascript.optimizer.Codegen.compile(Codegen.java:75)
    at org.mozilla.javascript.Context.compileImpl(Context.java:2377)
    at org.mozilla.javascript.Context.compileReader(Context.java:1296)
    at org.lesscss.LessCompiler.init(LessCompiler.java:295)
    at org.lesscss.LessCompiler.compile(LessCompiler.java:357)
    at org.lesscss.LessCompiler.compile(LessCompiler.java:450)
  

Это особенно странно, поскольку метод, который он не вызывает, является общедоступным (https://github.com/mozilla/rhino/blob/master/src/org/mozilla/classfile/ClassFileWriter.java#L1260-L1268).

Как уже упоминалось, я думаю, что это как-то связано со средой Heroku, поскольку я не могу воспроизвести это на своей машине разработки.

Любые идеи будут с благодарностью приняты.

Комментарии:

1. Быстрое обновление: я подозреваю, что здесь присутствует конфликт версий, поскольку метод-нарушитель помечен как закрытый в Rhino RC7.2 — я, однако, явно загружаю RC7.4, используя leiningen (и, следовательно, maven) в качестве моего менеджера зависимостей — и он, как упоминалось, не выдает эту ошибку на моей машине разработки).

2. На случай, если кого-то это волнует, на моей машине разработки загружается правильный mozilla jar, но в среде Heroku загружается Rhino #<CodeSource (file:/app/.m2/repository/com/google/javascript/closure-compiler/r1592/closure-compiler-r1592.jar <no signer certificates>) — следующий шаг — выяснить, почему.

Ответ №1:

Я решил эту проблему, исключив зависимость-нарушитель из моей сборки project.clj , поскольку она сама по себе не была нужна. Я все еще не уверен, почему эта проблема проявлялась только в некоторых средах, но теперь она, по крайней мере, решена.