2013-02-20 6 views
1

Я пытаюсь создать тест с помощью Pax Exam, где некоторые из пакетов, которые я загружаю для теста, зависят от пакета «org.apache.felix.ipojo».Загрузка ipojo Maven Bundle в Pax Exam Test

Если бы я выйти из линии ЗАГРУЗКА этот пакет в конфигурации экзамен Pax, например:

@Configuration 
public Option[] config() throws MalformedURLException{ 
    return options(
      junitBundles(), 
      BUNDLES OTHER THAN(org.apache.felix.ipojo), 
      ... 

Тогда я получаю сообщение об ошибке, указывающее, что этот пакет является недостающим зависимость:

ERROR: Bundle com.N.A [35] Error starting mvn:com.N/com.N.A (org.osgi.framework.BundleException: Unresolved constraint in bundle com.N.A [35]: Unable to resolve 35.0: missing requirement [35.0] osgi.wiring.package; (&(osgi.wiring.package=org.apache.felix.ipojo)(version>=1.8.0))) 
org.osgi.framework.BundleException: Unresolved constraint in bundle com.N.A [35]: Unable to resolve 35.0: missing requirement [35.0] osgi.wiring.package; (&(osgi.wiring.package=org.apache.felix.ipojo)(version>=1.8.0)) 
     at org.apache.felix.framework.Felix.resolveBundleRevision(Felix.java:3826) 
     at org.apache.felix.framework.Felix.startBundle(Felix.java:1868) 
     at org.apache.felix.framework.Felix.setActiveStartLevel(Felix.java:1191) 
     at org.apache.felix.framework.FrameworkStartLevelImpl.run(FrameworkStartLevelImpl.java:295) 
     at java.lang.Thread.run(Thread.java:662) 

Однако, если добавить строку, которая включает в себя это:

@Configuration 
public Option[] config() throws MalformedURLException{ 
    return options(
      junitBundles(), 
mavenBundle().groupId("org.apache.felix").artifactId("org.apache.felix.ipojo") 
      ... 

Я получаю сообщение indicatin g a ClassCastException, которое, как я полагаю, связано с тем, что пакет ipojo встроен в Felix.

ERROR: Bundle org.apache.felix.ipojo [34] Error starting mvn:org.apache.felix/org.apache.felix.ipojo (org.osgi.framework.BundleException: Activator start error in bundle org.apache.felix.ipojo [34].) 
java.lang.ClassCastException: org.apache.felix.ipojo.Extender cannot be cast to org.osgi.framework.BundleActivator 
     at org.apache.felix.framework.Felix.createBundleActivator(Felix.java:4177) 
     at org.apache.felix.framework.Felix.activateBundle(Felix.java:1972) 
     at org.apache.felix.framework.Felix.startBundle(Felix.java:1895) 
     at org.apache.felix.framework.Felix.setActiveStartLevel(Felix.java:1191) 
     at org.apache.felix.framework.FrameworkStartLevelImpl.run(FrameworkStartLevelImpl.java:295) 
     at java.lang.Thread.run(Thread.java:662) 

Я использую Felix и JUint4TestRunner в качестве бегуна.

Как я могу получить доступ к этой зависимости без конфликта?

+0

Вы решили это еще? Помог ли Климент в вашем случае? Я сталкиваюсь с аналогичными проблемами при попытке интеграции pax-exam и iPojo, и я отчаянно ищу рабочий пример. – benjamin

ответ

0

Вот это то, что я использую:

public CompositeOption ipojoBundles() { 
    return new DefaultCompositeOption(
      mavenBundle("org.apache.felix", "org.apache.felix.ipojo").versionAsInProject(), 
      mavenBundle("org.ow2.chameleon.testing", "osgi-helpers").versionAsInProject()); 
} 

со следующими версиями: iPOJO 1.8.6 и OSGi-хелперы 0.6.0

Помощники методы, снижающие нагрузку при написании OSGi тестов.

1

ClassCastException скорее всего указывает на то, что у вас есть другая копия API OSGi в вашем пути к классам. Если у вас есть зависимость от Maven от org.osgi:org.osgi.core, убедитесь, что область составляет provided, а не compile или test.