2016-03-28 2 views
0

Я пытался портировать Paul Bakker's (@ Поль-Баккер) Making JavaFX better with OSGi : javafx-osgi-example к OSGi проекта Maven, который использует Apache Felix Maven Bundle Plugin (BND). До сих пор она компилируется без каких-либо ошибок, но я не могу заставить его работать:проект Maven OSGi компилируется, но не будет работать

Starting OSGi Framework 
Found declarative services implementation: file:/C:/Users/Rev/.m2/repository/org/apache/felix/org.apache.felix.scr/1.6.2/org.apache.felix.scr-1.6.2.jar 
INFO : org.apache.felix.scr (1): Version = 1.6.2 
Bundle: org.apache.felix.framework 
    Registered service: [org.osgi.service.resolver.Resolver] 
    Registered service: [org.osgi.service.packageadmin.PackageAdmin] 
    Registered service: [org.osgi.service.startlevel.StartLevel] 
Bundle: org.apache.felix.scr 
    Registered service: [org.apache.felix.scr.ScrService] 
    Registered service: [org.osgi.service.cm.ManagedService] 
    Registered service: [org.apache.felix.scr.impl.ScrGogoCommand] 
DEBUG: Starting ComponentActorThread 
Bundle: null 
Bundle: null 
Bundle: null 

Как вы можете видеть, пучки никогда не начать. Ошибок не возникает. Это просто не начинается.

Почему пучки не начинаются?

ИСТОЧНИКИ

проекта

  1. Paul Bakker's (The original non-maven project) : javafx-osgi-example

  2. My maven implementation of Paul Bakker's javafx-osgi-example : JavaFX-Maven-Multi-Module-OSGi

С терминала (Windows) mvn clean install работает отлично.

UPDATE

Я пытался запустить его из Eclipse, но без успеха:

Run -> Запуск -> Java Application


Eclipse Java EE IDE для веб-разработчиков.

Версия: Mars.2 релиз (4.5.2)
Сложение ID: 20160218-0600


UPDATE

У меня есть класс App под расстояние в пакет rev.dist, который запускает. Он прокручивает все каталоги под заголовком rev и запускает все банки, имена которых соответствуют именам под resources/plugins.txt.

APP.java

package rev.dist; 

import java.io.BufferedReader; 
import java.io.File; 
import java.io.IOException; 
import java.net.URISyntaxException; 
import java.net.URL; 
import java.nio.file.Files; 
import java.nio.file.Paths; 
import java.util.ArrayList; 
import java.util.HashMap; 
import java.util.List; 
import java.util.Map; 
import java.util.ServiceLoader; 
import java.util.stream.Collectors; 

import org.apache.commons.io.FilenameUtils; 
import org.osgi.framework.Bundle; 
import org.osgi.framework.BundleException; 
import org.osgi.framework.Constants; 
import org.osgi.framework.ServiceReference; 
import org.osgi.framework.launch.Framework; 
import org.osgi.framework.launch.FrameworkFactory; 

public class App { 

    FrameworkFactory frameworkFactory; 
    private Framework framework; 

    private List<String> pluginsList = new ArrayList<>(); 

    private int addedPlugins; 

    public static void main(String[] args) throws BundleException, URISyntaxException { 
     App app = new App(); 
     app.initialize(); 
    } 

    private void initialize() throws BundleException, URISyntaxException { 
     this.plugins(); 

     Map<String, String> map = new HashMap<String, String>(); 

     // make sure the cache is cleaned 
     map.put(Constants.FRAMEWORK_STORAGE_CLEAN, Constants.FRAMEWORK_STORAGE_CLEAN_ONFIRSTINIT); 

     map.put("ds.showtrace", "true"); 
     map.put("ds.showerrors", "true"); 

     frameworkFactory = ServiceLoader.load(FrameworkFactory.class).iterator().next(); 
     framework = frameworkFactory.newFramework(map); 

     System.out.println("Starting OSGi Framework"); 
     framework.init(); 

     loadScrBundle(framework); 

     File baseDir = new File("../"); 
     String baseDirPath = baseDir.getAbsolutePath(); 

     File[] files = new File(baseDirPath).listFiles(); 

     this.showFiles(files); 

     for (Bundle bundle : framework.getBundleContext().getBundles()) { 
      bundle.start(); 
      System.out.println("Bundle: " + bundle.getSymbolicName()); 
      if (bundle.getRegisteredServices() != null) { 
       for (ServiceReference<?> serviceReference : bundle.getRegisteredServices()) 
        System.out.println("\tRegistered service: " + serviceReference); 
      } 
     } 
    } 

    public void showFiles(File[] files) throws BundleException { 

     if (addedPlugins != pluginsList.size()) { 
      System.out.println(":: " + pluginsList.size()); 
      addedPlugins--; 
     } 

     for (File file : files) { 
      if (file.isDirectory()) { 
       // System.out.println("Directory: " + file.getName()); 
       showFiles(file.listFiles()); // Calls same method again. 
      } else { 
       String[] bits = file.getName().split("."); 
       if (bits.length > 0 && bits[bits.length - 1].equalsIgnoreCase("jar")) { 
        // framework.getBundleContext().installBundle(file.toURI().toString()); 
       } 

       // String ext = FilenameUtils.getExtension(file.getAbsolutePath()); 

       String basename = FilenameUtils.getBaseName(file.getName()); 

       if (pluginsList.contains(basename)) { 
        framework.getBundleContext().installBundle(file.toURI().toString()); 
        System.out.println("File: " + file.getName()); 

        System.out.println("Base >>>>>>>>>>>>> : " + basename); 

        pluginsList.remove(basename); 
       } 
      } 
     } 
    } 

    public void plugins() { 
     File plugins = new File("src/main/resources/plugins.txt"); 
     String fileName = plugins.getAbsolutePath(); 

     try (BufferedReader br = Files.newBufferedReader(Paths.get(fileName))) { 

      // br returns as stream and convert it into a List 
      pluginsList = br.lines().collect(Collectors.toList()); 

     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

     pluginsList.forEach(System.out::println); 
     addedPlugins = pluginsList.size(); 
    } 

    private void loadScrBundle(Framework framework) throws URISyntaxException, BundleException { 
     URL url = getClass().getClassLoader().getResource("org/apache/felix/scr/ScrService.class"); 
     if (url == null) 
      throw new RuntimeException("Could not find the class org.apache.felix.scr.ScrService"); 
     String jarPath = url.toURI().getSchemeSpecificPart().replaceAll("!.*", ""); 
     System.out.println("Found declarative services implementation: " + jarPath); 
     framework.getBundleContext().installBundle(jarPath).start(); 
    } 
} 
+0

mvn clean install не работает отлично. Ui pom объявляет зависимость от rev.launcher: launcher: 1.0-SNAPSHOT, а основной экран pom объявляет зависимость от rev.ui: ui: 1.0-SNAPSHOT. Идентификаторы группы модулей запуска и ui, которые в настоящее время строятся, просто «rev». Я думаю, что вы переименовали идентификаторы группы после запуска mvn install и собираете старые версии из своего локального репозитория. –

+1

Дескриптор сборки, используемый в dist, использует moduleSet, но другие остальные модули являются дочерними элементами rev: rev top level pom. Я думаю, вам нужно использовать dependencySet, см. Http://stackoverflow.com/questions/17310482/the-maven-assembly-plugin-moduleset-sources-instructions-are-not-including-any-f. Не могли бы вы уточнить вопрос более подробно о том, как создавать и запускать свой код? –

+0

Как вы его запускаете? Здесь почти нет информации ... –

ответ

1

Я выпустил пару первых версий раннего доступа в Drombler FX - модульная структура приложения для JavaFX.

Это не основано на работе Пола Баккера, но оно основано на OSGi и Maven (POM-first). Может быть, вы сочтете это полезным. Структура приложения - это Open Source.

Существует также tutorial с страницей Getting Started.

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