web-dev-qa-db-ja.com

最終クラスエラーから継承できません

このエラーの意味.. Eclipseでは正常に動作しますが、intellijのアイデアでは動作しません

Exception in thread "main" Java.lang.VerifyError: Cannot inherit from final class
at Java.lang.ClassLoader.defineClass1(Native Method)
at Java.lang.ClassLoader.defineClassCond(ClassLoader.Java:631)
at Java.lang.ClassLoader.defineClass(ClassLoader.Java:615)
at Java.security.SecureClassLoader.defineClass(SecureClassLoader.Java:141)
at Java.net.URLClassLoader.defineClass(URLClassLoader.Java:283)
at Java.net.URLClassLoader.access$000(URLClassLoader.Java:58)
at Java.net.URLClassLoader$1.run(URLClassLoader.Java:197)
at Java.security.AccessController.doPrivileged(Native Method)
at Java.net.URLClassLoader.findClass(URLClassLoader.Java:190)
at Java.lang.ClassLoader.loadClass(ClassLoader.Java:306)
at Sun.misc.Launcher$AppClassLoader.loadClass(Launcher.Java:301)
at Java.lang.ClassLoader.loadClass(ClassLoader.Java:247)
at com.couchbase.client.ViewConnection.createConnections(ViewConnection.Java:120)
at com.couchbase.client.ViewConnection.<init>(ViewConnection.Java:100)
at com.couchbase.client.CouchbaseConnectionFactory.createViewConnection(CouchbaseConnectionFactory.Java:179)
at com.couchbase.client.CouchbaseClient.<init>(CouchbaseClient.Java:243)
at com.couchbase.client.CouchbaseClient.<init>(CouchbaseClient.Java:175)
at com.couchbase.App.putincbase(App.Java:122)
at examplesCons.TestCons.run(TestCons.Java:89)
at examplesCons.TestCons.main(TestCons.Java:121)
at Sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at Sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.Java:39)
at Sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.Java:25)
at Java.lang.reflect.Method.invoke(Method.Java:597)
at com.intellij.rt.execution.application.AppMain.main(AppMain.Java:120)

Intellij IDeaのcouchbase-client-1.1.6.jarを使用してcouchbaseを実行しようとすると、このエラーが発生します。

13
TommyT

kotlinを使用している場合は、openをクラスに追加します(RealmObjectを拡張します)。

52
itzhar

メッセージはそれが言うことを意味します。

どこかに、なんとかしてスーパークラスを拡張するクラスを作成できました。スーパークラスはfinalとして宣言されています。

最も可能性の高い原因は、ビルドクラスパスと起動クラスパスの間に競合があることです。つまり、finalではないスーパークラスのバージョンに対してサブクラスをコンパイルし、finalであるバージョンに対して実行します。検証者はこれが(正しく)間違っていると言っています。


これが原因であるのがビルド/クラスの1つではない場合、使用しているCouchDBクライアントクラス内の内部の競合です。実際、これがVerifyErrorではなくIncompatibleClassChangeErrorであるという事実は、いくつかの動的に生成されたバイトコードに問題がある可能性があることを示唆しています。

12
Stephen C

IntelliJ Idea:2018.3 Community Editionでもこれに直面しましたが、以下を実行すると修正されました:

mvn -U idea:idea clean compile install -DskipTests
0
Saurabh