Ответ 1
UPDATE
Есть новые версии java7, которые исправляют эту проблему. Как написано в ответ на Powermock/Javassist создает незаконные конструкторы для JDK 1.7.0u65 и 1.8.0u11 с -target 7 # 525
Обновление с java 7u71 до 7u75 устраняло проблему
Rootcause
После расследования я услышал крики о помощи со всего Интернета со всех инструментов и языков, которые были построены на JDK.
Оказывается, причиной является новый стандарт байт-кода java, который проверяется новым верификатором. Но, к сожалению, javassist иногда попросил powermock произвести изменения в байт-код, которые больше не принимаются этим новым блестящим очень хорошим.
Обходной путь (для тех, кто не может перейти с более новой java)
В качестве обходного пути в блог JRebel они предложили использовать -noverify при запуске JVM Однако я нашел из Java 7 Bytecode Verifier: Огромный шаг назад для JVM. Альтернативное обходное сообщение в блоге, которое работает на java7: -XX: - UseSplitVerifier
Поскольку мои тесты выполняются на некотором недоступном сервере и выполняются как часть сборки maven, мне нужно найти способ передать этот аргумент вместе с файлами проекта. Первое работоспособное решение, которое я обнаружил, - это добавить этот параметр в конфигурацию плагина surefire в pom.xml следующим образом:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.10</version>
<configuration>
<argLine>-XX:-UseSplitVerifier</argLine>
</configuration>
</plugin>
<plugin>
</plugins>
</build>
Я полагаю, что на java8 можно было использовать аналогичный метод для вызова тестов с помощью клавиши -noverify, но у него не было возможности подтвердить это.
Другие связанные ресурсы, чтобы следить за
Powermock/Javassist создает незаконные конструкторы для JDK 1.7.0u65 и 1.8.0u11 с -target 7. Powermock/Javassist создает незаконные конструкторы для JDK 1.7.0u65 и 1.8.0u11 с -target 7 # 525