2015-12-04 8 views
4

Im пытается подключиться к базе данных в проекте JFUSE. Я включил зависимость com.mysql.jdbc в файле pom, а сборка проектов работает нормально. Но потом я столкнулся с этой досадной проблемой. При попытке установить пакет на OSGi, установка не удалась с следующей ошибкой:Сделать maven зависимость OSGi готова

Невозможно запустить пакет МВН: com.info.demo/демо-Rest/1,0: Нерешенные константный raint в расслоении com.info.demo .rest [363]: Невозможно разрешить 363.0: недостающее требование [363.0] osgi.wiring.package; (osgi.wiring.package = com.mysql.jdbc)

Я пробовал все доступные решения от SO, но они не решили проблему. В то время как я пытался найти причину ошибки, я увидел предупреждение в зависимости декларации MySQL в среде IDE, который говорит:

Maven зависимости не OSGi готовы

Так что, я думаю, главная причина в том, что моя зависимости является не готов к контейнеру OSGi. Может ли кто-нибудь мне помочь как сделать maven зависимость OSGi готова?

Ниже мой pom.xml код:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 

***Project specific declarations here*** 

<build>  
    <plugins> 
     <plugin> 
      <groupId>org.apache.felix</groupId> 
      <artifactId>maven-bundle-plugin</artifactId> 
      <version>2.1.0</version> 
      <extensions>true</extensions> 
      <configuration> 
       <instructions> 
        <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName> 
        <Fragment-Host>org.springframework.jdbc</Fragment-Host> 
        <Import-Package>com.mysql.jdbc</Import-Package> 
       </instructions> 
      </configuration>     
     </plugin> 
    </plugins> 
</build> 

<dependencies> 
    <dependency> 
     <groupId>com.mysql.jdbc</groupId> 
     <artifactId>com.springsource.com.mysql.jdbc</artifactId> 
     <version>5.1.6</version> 
    </dependency> 
    ***Other Dependencies*** 
</dependencies> 

Edit: Я последовал Кристейн предложение и отлично работают. Но мне нужно добавить другие зависимости, которые не готовы к OSGi.

Я прошел через установку зависимостей OSGi от сервера FUSE. А также обертывание зависимостей, но не решило проблему.

Пожалуйста, помогите мне с подробным решением, Im действительно застрял здесь.

+0

Специальная причина использования такой древней версии [maven-bundle-plugin?] (Http://search.maven.org/#search|gav|1|g%3A%22org.apache.felix%22%20AND % 20a% 3A% 22maven-bundle-plugin% 22) – khmarbaise

+0

Вы посмотрели на обертку зависимости? http://stackoverflow.com/questions/4565327/good-way-to-wrap-jars-for-osgi-with-maven – stalet

ответ

2

С некоторыми днями поиска я наконец нашел простейшие решения. Non OSGi расслоения может быть OSGi готова только используя эту простую OSGi обертку команду в Karaf или ServiceMix терминале:

OSGi: установить обертывание: МВН: org.jdbi/jdbi/2,70

Dependency будет установлен на сервере Fuse, который можно проверить с помощью команды.

OSGi: список

Теперь просто добавьте зависимостей в ПОМ.

<dependency> 
    <groupId>org.jdbi</groupId> 
    <artifactId>jdbi</artifactId> 
    <version>2.70</version> 
</dependency> 

Идея по-прежнему будет предупреждать вас, что зависимость не является OSGi, просто игнорируйте ее.

И наконец, необходимо импортировать необходимый пакет в плагин maven bundle, и все готово.

<plugin> 
      <groupId>org.apache.felix</groupId> 
      <artifactId>maven-bundle-plugin</artifactId> 
      <version>${version.maven-bundle-plugin}</version> 
      <extensions>true</extensions> 
      <configuration> 
       <instructions> 
        <Import-Package> 
         org.skife.jdbi.v2, 
         org.skife.jdbi.v2.util, 
         org.skife.jdbi.cglib.proxy, 
         org.skife.jdbi.v2.sqlobject.stringtemplate, 
         org.skife.jdbi.v2.sqlobject, 
         org.skife.jdbi.cglib.core 
        </Import-Package> 
       </instructions> 
      </configuration> 
     </plugin> 

Надеюсь, это поможет кому-то в будущем.

2

В случае с драйвером mysql вам не нужно делать обертку самостоятельно. Разъем mysql j, доступный из центра maven, уже готов к OSGi. Координаты maven: mvn: mysql/mysql-connector-java/5.1.34.

Поскольку использовать простой драйвер jdbc в OSGi не рекомендуется, рекомендуется также использовать pax-jdbc. Он позволяет создавать DataSource в качестве службы OSGi, просто поставляя некоторую конфигурацию.

Вы можете установить его таким образом (в Karaf> 3): особенность: репо добавить Pax-0.7.0 JDBC функцию: установить транзакции PAX-JDBC-MySQL чел-JDBC-конфигурации Pax-бассейн--JDBC dbcp2

Это уже предоставляет DataSourceFactory для MySQL и позволяет поддерживать конфигурацию и объединение в пул.

Тогда вам просто нужно создать конфигурацию, как описано на pax jdbc docs.

+0

+1 для вашего OSGi готового предложения jdbc. Я следил за твоим блогом, и он отлично работает. Но мне также нужно добавить другие зависимости, которые не готовы к OSGi, такие как org.jdbi. Можете ли вы предложить мне jdbi, который уже готов OSGi или метод, чтобы сделать OSGi готовыми зависимостями OSGi. – Crawler

0

Эта ошибка означает, что Fuse не знает о комплекте для драйвера mysql. Вам необходимо вручную установить его. Поскольку соединитель mysql находится в виде пакета, его проще установить в среде OSGI. Просто используйте osgi: install, а затем имя пакета.

Вы также можете создать архив архива, чтобы избежать этого.

В качестве альтернативы можно использовать собственный драйвер для использования Karaf/Fuse, упомянутый христианином.

+0

Я исправил проблему jdbc, но теперь мне нужно работать с jdbi. jdbi показан активным в списке пакетов OSGi консоли karaf. но проблема не решена. – Crawler

0

Для зависимостей Maven, которые не являются OSGi, есть плагин maven для их деформации - https://github.com/reficio/p2-maven-plugin, учебник - http://www.vogella.com/tutorials/EclipseTycho/article.html#d314078e1011. Этот подход хорошо подходит для простых компонентов, но для компонентов с большим количеством зависимостей или большого количества экспортированных пакетов вам может потребоваться вручную создать пакет обертки, например. Мне пришлось вручную создавать пакеты-оболочки для pegdown, selenium и selendroid.

+0

Мне нужно использовать org.jdbi. org.skife.jdbi. * пакет выдает исключение для проводки и выше пакет пакета org.antlr.stringtemplate пакета. теперь вы можете уточнить, как создать оболочку для этого условия. Я пытался создать обертку, но не работал. – Crawler

+0

Это процесс, который я выполняю при переносе компонентов maven в OSGi: –

+0

a) Посмотрите на дерево зависимостей, а затем посмотрите на репозитории Eclipse и Orbit, чтобы увидеть, есть ли уже завернутые зависимости (например, org.json, javax.transaction, junit , ...) b) Если количество зависимостей невелико и они недоступны в репозиториях Eclipse и Orbit - попробуйте использовать p2-maven-plugin. В некоторых случаях это не работает. c) Если существуют существующие завернутые зависимости или p2-maven-plugin не работает (например, в случае Selenium WebDriver) - создайте проект плагина в Eclipse со всеми развёрнутыми банками зависимостей, добавьте завернутые зависимости и постройте репо с помощью Tycho/Maven –

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

  • Нет связанных вопросов^_^