Почему java.lang.ClassFormatError: неверное имя поля JVMCFRE114 возникает в AIX при использовании Proguard? - PullRequest
1 голос
/ 29 июня 2019

Я использовал Proguard в файле jar, чтобы запутать его. Он очень хорошо работает в Windows и Linux, но при развертывании в AIX выдает следующую ошибку.

2019-06-29 13:09:12:192 [ERROR] [main:ID=1]:[null:-1] java.lang.ClassFormatError: JVMCFRE114 field name is invalid; class=Messaging/broadcaster/OracleWriterMessageBroadcaster, offset=0
    at java.lang.ClassLoader.defineClassImpl(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:346)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:154)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:718)
    at java.net.URLClassLoader.access$400(URLClassLoader.java:95)
    at java.net.URLClassLoader$ClassFinder.run(URLClassLoader.java:1169)
    at java.security.AccessController.doPrivileged(AccessController.java:742)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:601)
    at java.lang.ClassLoader.loadClassHelper(ClassLoader.java:792)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:766)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:325)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:747)
    at java.lang.Class.forNameImpl(Native Method)
    at java.lang.Class.forName(Class.java:257)
    at UniversalGprsClientService.ProcessMonitor.a(Unknown Source)
    at UniversalGprsClientService.ProcessMonitor.main(Unknown Source)

Это фрагмент кода, в котором возникает ошибка:

        Class<?> c = Class.forName(sClassName);

        Constructor<?> cons = c.getConstructor();
        IMessageBroadcaster clsBroadcaster = (IMessageBroadcaster) cons.newInstance();
        clsBroadcaster.setAppSettings(clsAppSettings);
        clsBroadcaster.setProcessMonitor(clsMonitor);
        return clsBroadcaster;

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...