2016-03-30 21 views
1

Intellijを使用してアンドロイドスタジオの新しいプロジェクトウィザードを拡張するためのプラグインを開発中です。 findInstance方法は、内部のsdkTypeクラスの一つでAndroidSdkType.Classを比較しようとするため、この問題が発生し、複数のクラスローダーで同じクラスが読み込まれています - Intellijプラグイン

null 
java.lang.AssertionError 
at com.intellij.openapi.projectRoots.SdkType.findInstance(SdkType.java:207) 
at org.jetbrains.android.sdk.AndroidSdkType.getInstance(AndroidSdkType.java:231) 
at org.jetbrains.android.sdk.AndroidSdkUtils.getAllAndroidSdks(AndroidSdkUtils.java:462) 
at org.jetbrains.android.sdk.AndroidSdkUtils.getAndroidSdkPathsFromExistingPlatforms(AndroidSdkUtils.java:443) 
at org.jetbrains.android.sdk.AndroidSdkUtils.tryToChooseAndroidSdk(AndroidSdkUtils.java:853) 
at com.android.tools.idea.npw.ConfigureAndroidProjectPath.putSdkDependentParams(ConfigureAndroidProjectPath.java:97) 
at com.android.tools.idea.npw.ConfigureAndroidProjectPath.init(ConfigureAndroidProjectPath.java:59) 
at com.android.tools.idea.wizard.dynamic.DynamicWizardPath.attachToWizard(DynamicWizardPath.java:98) 
at com.android.tools.idea.wizard.dynamic.DynamicWizard.addPath(DynamicWizard.java:242) 
at com.android.tools.idea.npw.NewProjectWizardDynamic.addPaths(NewProjectWizardDynamic.java:84) 
at tru.NewModuleWizardDynamicExtension.init(NewModuleWizardDynamicExtension.java:27) 
at NewProAction.actionPerformed(NewProAction.java:30) 
at com.intellij.openapi.actionSystem.ex.ActionUtil.performActionDumbAware(ActionUtil.java:182) 
at com.intellij.openapi.actionSystem.impl.ActionMenuItem$ActionTransmitter$1.run(ActionMenuItem.java:311) 
at com.intellij.openapi.wm.impl.FocusManagerImpl.runOnOwnContext(FocusManagerImpl.java:958) 
at com.intellij.openapi.wm.impl.IdeFocusManagerImpl.runOnOwnContext(IdeFocusManagerImpl.java:124) 
at com.intellij.openapi.actionSystem.impl.ActionMenuItem$ActionTransmitter.actionPerformed(ActionMenuItem.java:281) 
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022) 
at com.intellij.openapi.actionSystem.impl.ActionMenuItem.fireActionPerformed(ActionMenuItem.java:109) 
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348) 
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402) 
at javax.swing.JToggleButton$ToggleButtonModel.setPressed(JToggleButton.java:308) 
at javax.swing.AbstractButton.doClick(AbstractButton.java:376) 
at com.apple.laf.ScreenMenuItemCheckbox.itemStateChanged(ScreenMenuItemCheckbox.java:193) 
at java.awt.CheckboxMenuItem.processItemEvent(CheckboxMenuItem.java:389) 
at java.awt.CheckboxMenuItem.processEvent(CheckboxMenuItem.java:357) 
at java.awt.MenuComponent.dispatchEventImpl(MenuComponent.java:351) 
at java.awt.MenuComponent.dispatchEvent(MenuComponent.java:339) 
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:761) 
at java.awt.EventQueue.access$500(EventQueue.java:97) 
at java.awt.EventQueue$3.run(EventQueue.java:709) 
at java.awt.EventQueue$3.run(EventQueue.java:703) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76) 
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86) 
at java.awt.EventQueue$4.run(EventQueue.java:731) 
at java.awt.EventQueue$4.run(EventQueue.java:729) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76) 
at java.awt.EventQueue.dispatchEvent(EventQueue.java:728) 
at com.intellij.ide.IdeEventQueue.defaultDispatchEvent(IdeEventQueue.java:866) 
at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:654) 
at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:381) 
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201) 
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116) 
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105) 
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) 
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93) 
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82) 

をnullに、以下のエラー貼り付け:

私はAndroidSdkUtils.isAndroidSdkAvailable(呼び出そう)アサーションを取得していますforループ、クラスは実際には同じですが、2つの異なるローダー(org.jetbrains.android)とローカルローダー(com.sample.sample)からロードされます。

この問題はどのように解決できますか?

このクラスローダーの問題のため、私はしばしばクラスキャスト例外も取得します。だから私はプラグインを開発するためにさまざまな方法を使用しようとすると、このクラスローダの問題で打たれました。

答えて

0

はい私はちょうどこれを行い、プラグインを正常に実行しました。

このドキュメントは私の質問に完全な答えを与えます。他人に役立つかもしれないと思う。他人の便宜上

http://www.jetbrains.org/intellij/sdk/docs/basics/plugin_structure/plugin_dependencies.html

は、プラグインSDKのクラスパスに追加された「android.jar」のスクリーンショットを添付しています。

次に、「org.jetbrains.android」が「android.jar」プラグインのプラグインIDであるplugin.xmlファイルに追加したコードスニペットを示します。

org.jetbrains.android

もアンドロイドのスタジオのためにこれを開発していますように、私はのIntelliJ IDEで実行することができませんでしたが、アンドロイドのスタジオで実行することができました。

Intellij SDK classpath screenshot

0

Androidプラグインの.jarファイルをIntelliJ IDEA SDKのクラスパスにライブラリとして追加するのではなく、追加する必要があります。

関連する問題