2015-04-01 2 views
2

Моего Gradle проекта ("osgiapp") имеет зависимость от проекта OSGI ("osgidep"), который имеет следующий Manifest.mf запись:Gradle: Правильно строить из MANIFEST.MF классов OSGi DEPENDENCY в

Manifest-Version: 1.0 
Export-Package: test.lib,test.osgidep 
Bundle-ClassPath: lib/lib.jar,. 
Bundle-Name: osgidep 
Bundle-Version: 1.0 
Bundle-SymbolicName: osgidep 

Два пакета экспортируется здесь:

  • пакета test.lib обеспечивается Lib/lib.jar включен в osgidep.jar
  • пакета test.osgidep обеспечиваются самой osgidep.jar

Теперь мой build.gradle выглядит следующим образом:

apply plugin: 'java' 
apply plugin: 'osgi' 

repositories { 
    flatDir { 
     dirs "../osgidep" 
    } 
} 

dependencies { 
    compile ":osgidep:" 
} 

И когда я пытаюсь создать код, который использует как экспортируемые пакеты:

package test.osgi; 

import test.lib.Lib; 
import test.osgidep.OsgiDep; 

public class Test 
{ 
    Lib lib = new Lib(); 
    OsgiDep dep = new OsgiDep(); 
} 

я получаю ошибку компиляции, говоря что пакета test.lib не существует.

Как я могу сказать, что gradle генерирует правильный путь к классам на основе записей MANIFEST.MF зависимости?

ответ

0

Ваша проблема в том, что некоторые типы, необходимые для компиляции osgiapp, «скрыты» в пути Bundle-Classpath от osgidep. javac ничего не знает о Bundle-Classpath. Вам нужно будет извлечь lib.jar где-нибудь, чтобы вы могли добавить его в зависимости от компиляции для osgiapp. Встроенные банки, такие как lib.jar, являются проблематичными, если вам нужно использовать пакет в качестве зависимости от компиляции.

+0

Правильно. То, что я ищу, - это какой-то автоматизированный способ настройки пути к классу при использовании градиента - подобный вид волшебства Eclipse с PDE. – MichalR

+0

Я не думаю, что PDE обрабатывает Bundle-Classpath. –

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