Я работаю с protobufs с платформой воспроизведения 2.1.3 без проблем. Затем мне нужно было преобразовать протобуфы в JSON, поэтому я включилPlay framework java.lang.NoClassDefFoundError только в режиме dev
"com.googlecode.protobuf-java-format" % "protobuf-java-format" % "1.2"
в Build.scala.
Попытка тайной любой Protobuf в формат JSON с использованием
JsonFormat.printToString(message);
Это приводит к следующей ошибке при работе в режиме разработчика (начал с игрой запуском)
play.api.Application$$anon$1: Execution exception[[RuntimeException: java.lang.NoClassDefFoundError: com/google/protobuf/InvalidProtocolBufferException]]
...
Caused by: java.lang.NoClassDefFoundError: com/google/protobuf/InvalidProtocolBufferException
...
Caused by: java.lang.ClassNotFoundException: com.google.protobuf.InvalidProtocolBufferException
at java.net.URLClassLoader$1.run(URLClassLoader.java:202) ~[na:1.6.0_51]
at java.security.AccessController.doPrivileged(Native Method) ~[na:1.6.0_51]
at java.net.URLClassLoader.findClass(URLClassLoader.java:190) ~[na:1.6.0_51]
at java.lang.ClassLoader.loadClass(ClassLoader.java:306) ~[na:1.6.0_51]
at java.lang.ClassLoader.loadClass(ClassLoader.java:247) ~[na:1.6.0_51]
at sbt.PlayCommands$$anonfun$53$$anonfun$55$$anon$2.loadClass(PlayCommands.scala:535) ~[na:na]
Если игра запускается в рабочем режиме У меня нет никаких ошибок.
Я смог заставить его работать в режиме dev, если я поместил исходный код для protobuf-java-format в папку своего приложения. В качестве временного решения это работает, но я хотел бы знать правильный способ решения этой проблемы.
Дополнительная информация: По предложению ниже, я проверил путь к игре, заработал зависимостей и выполнил поиск в моей системе, и у меня есть только одна копия включенной банки.
Я могу работать без проблем:
Exception e = new InvalidProtocolBufferException()
NoClassDefFoundError отбрасывается, когда я пытаюсь использовать любой статический метод из библиотеки Protobuf-ява-формате. Например:
XmlFormat.printToString(message)
Не работает в режиме dev, но работает в режиме производства (начало игры). Интересно, что класс он говорит, что не может найти другое:
[RuntimeException: java.lang.NoClassDefFoundError: com/google/protobuf/Message]
Я использую методы из библиотеки Protobuf без проблем в других местах, так что я знаю, что они включаются в пути класса.
от Google, я был в состоянии найти еще один экземпляр, который имеет аналогичные проблемы: https://groups.google.com/forum/#!msg/play-framework/i0RNcu8PZOY/J7cy18xsg3oJ
Я не был в состоянии понять, как реорганизовать код, чтобы заставить его работать.
Я использую 2.3 для библиотеки protobuf. [Protobuf java format] (https://code.google.com/p/protobuf-java-format/) - отдельный проект для сериализации protobuf для JSON, XML или HTML. –
упростите проблему, затем ... выньте protobuf-java-format и вместо этого добавьте такой код, как Exception e = new InvalidProtocolBufferException(), чтобы увидеть, работает ли это в первую очередь. Как вы включаете банку, и уверены ли вы, что в пути классов нет нескольких версий? Убедитесь, что вы просматриваете файловую систему для всех * .jars и убедитесь, что у вас нет двух версий. –
Пытался включить подробную информацию о всех предложениях. Я отредактировал сообщение выше с подробностями –