2014-11-04 3 views
0

Я использовал Eclipse 3.7 (Indigo) и имел плагин, который добавлял определенный каталог к ​​активной целевой платформе.Динамически добавлять каталог в целевую платформу на Eclipse

ITargetPlatformService service = (ITargetPlatformService) PDECore.getDefault().acquireService(ITargetPlatformService.class.getName()); 
ITargetDefinition target = service.getWorkspaceTargetHandle().getTargetDefinition(); 
IBundleContainer[] bundles = target.getBundleContainers(); 
String myDirectory = "C:\\directory"; 
boolean containsMyDirectory = false; 

for (IBundleContainer bundle : bundles) { 
    if (bundle.toString().contains(myDirectory.toString())) { 
     containsMyDirectory = true; 
     break; 
    } 
} 

if (!containsMyDirectory) { 
    bundles = Arrays.copyOf(bundles, bundles.length + 1); 
    bundles[bundles.length - 1] = service.newDirectoryContainer(myDirectory.toString()); 
    target.setBundleContainers(bundles); 
    service.saveTargetDefinition(target); 
    LoadTargetDefinitionJob.load(target); 
} 

Но теперь, мы мигрируют в Eclipse, 4.4 (Luna) и код не компилируется больше, показывая следующее сообщение: Импорт org.eclipse.pde.internal.core.target.provisional не может быть решен

импорта, которые не могут быть решены, были:

import org.eclipse.pde.internal.core.target.provisional.IBundleContainer; 
import org.eclipse.pde.internal.core.target.provisional.ITargetDefinition; 
import org.eclipse.pde.internal.core.target.provisional.ITargetPlatformService; 
import org.eclipse.pde.internal.core.target.provisional.LoadTargetDefinitionJob; 

сосуд используется в Eclipse, 3.7 org.eclipse.pde.core_3.7.1.v20120103_r372.jar и в Eclipse, 4.4 является орг .eclipse.pde.core_3.10.0.v20140519-1409.jar

Я не мог найти классы, которые заменяют старые.

Кто-нибудь знает, что делать?

ответ

0

Эти классы были внутренних, так что вы не должны были их использовать.

Теперь они были перемещены в пакет org.eclipse.pde.target в плагин org.eclipse.pde.core, поэтому они теперь являются частью официального API.

Однако PDECore все еще является внутренним, поэтому его не следует использовать. Поскольку ITargetPlatformService - это сервис OSGi, вы можете получить его в своем плагине с помощью ServiceReference.

+0

А как насчет методов ITargetDefinition.getBundleContainers() и ITargetPlatformService.newDirectoryContainer (String), которые больше не существуют? – hbelmiro

+0

Извините, не знаю, вам, вероятно, придется взглянуть на старый источник и новый источник, чтобы увидеть, как они изменили предварительный API до конечного API. –