2016-03-30 3 views
1

Разрабатывает плагин для расширения нового мастера проекта для студии Android с использованием Intellij.Тот же класс, загруженный несколькими загрузчиками классов - плагин Intellij

Когда я пытаюсь вызвать AndroidSdkUtils.isAndroidSdkAvailable() я получаю утверждение: нуль, Pasted ошибка ниже,

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) 

Это происходит потому, что метод FindInstance пытается сравнить AndroidSdkType.Class с одним из класса sdkType внутри цикл for, классы на самом деле одинаковы, но загружаются двумя разными загрузчиками: один из (org.jetbrains.android) и другой из локального загрузчика (com.sample.sample)

Как решить эту проблему?

Из-за этого вопроса загрузчика класса, я часто получаю classcastexception. Поэтому, когда я пытаюсь использовать разные способы разработки плагина, я поражен этой проблемой загрузчика класса.

ответ

0

Да, как сказал Йоле, я только что сделал это вчера и успешно выполнил плагин.

Эта документация дает прекрасный ответ на мой вопрос. Думайте, может быть полезно другим.

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

Ради других, прилагаю скриншот, где «android.jar» добавляется в пути к классам Plugin SDK.

И следующий фрагмент кода, который я добавил в файл plugin.xml, где «org.jetbrains.android» является идентификатором плагина «android.jar».

org.jetbrains.android

А также, как я разработка этого для андроид студии, я не был в состоянии работать в IntelliJ IDE, но был в состоянии выполнить в андроиде студии.

Intellij SDK classpath screenshot

0

Вам необходимо добавить файлы .jar плагина Android в путь к классам вашего пакета IntelliJ IDEA SDK вместо того, чтобы добавлять их в качестве библиотеки.

Смежные вопросы