#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
, поскольку она сама по себе не была нужна. Я все еще не уверен, почему эта проблема проявлялась только в некоторых средах, но теперь она, по крайней мере, решена.