2014-02-13 6 views
1

мне нужно, чтобы создать пакет OSGi включают зависимости, я использую Maven-сборочный-плагин, и это мой pom.xmlСложение OSGi расслоения включают зависимостей с Maven-сборки-плагин

<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/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <artifactId>logstat</artifactId> 
    <packaging>bundle</packaging> 
    <name>Log Stat Demo</name> 
    <version>1.0</version> 
    <groupId>org.test</groupId> 
    <dependencies> 
     <dependency> 
      <groupId>org.jruby</groupId> 
      <artifactId>yecht</artifactId> 
      <version>1.0</version> 
     </dependency> 
     <dependency> 
      <groupId>org.codehaus.groovy</groupId> 
      <artifactId>groovy-json</artifactId> 
      <version>2.2.1</version> 
     </dependency> 
    </dependencies> 
    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.felix</groupId> 
       <artifactId>maven-bundle-plugin</artifactId> 
       <version>2.4.0</version> 
       <extensions>true</extensions> 
       <configuration> 
        <instructions> 
         <Export-Package>activator.*,service.*,impl.*</Export-Package> 
         <Bundle-Activator>activator.Activator</Bundle-Activator> 
        </instructions> 
       </configuration> 
      </plugin> 
      <plugin> 
       <artifactId>maven-assembly-plugin</artifactId> 
       <configuration> 
        <archive> 
         <manifest> 
          <addClasspath>true</addClasspath> 
          <mainClass>activator.Activator</mainClass> 
         </manifest> 
        </archive> 
        <descriptorRefs> 
         <descriptorRef>jar-with-dependencies</descriptorRef> 
        </descriptorRefs> 
       </configuration> 
       <executions> 
        <execution> 
         <id>make-my-jar-with-dependencies</id> 
         <phase>package</phase> 
         <goals> 
          <goal>single</goal> 
         </goals> 
        </execution> 
       </executions> 
      </plugin> 
     </plugins> 
    </build> 
</project> 

Когда я запустить Maven сборки, он создал 2 фляг файл, один с зависимостями и один без

Но в один с зависимостями, то MANIFEST.MF не включают в себя конфигурацию OSGi как:

Manifest-Version: 1.0 
Bnd-LastModified: 1392281245886 
Build-Jdk: 1.6.0_45 
Built-By: myname 
Bundle-Activator: activator.Activator 
Bundle-ManifestVersion: 2 
Bundle-Name: test 
Bundle-SymbolicName: org.wiperdog.logstat 
Bundle-Version: 1.0.0 
Created-By: Apache Maven Bundle Plugin 
Export-Package: activator;uses:="org.osgi.framework";version="1.0.0",ser 
vice;version="1.0.0",impl;uses:="org.osgi.framework,service";version="1 
.0.0" 
Import-Package: org.jruby.embed;version="[1.7,2)",org.jruby.embed.osgi;v 
ersion="[1.7,2)",org.osgi.framework;version="[1.6,2)" 
Tool: Bnd-2.1.0.20130426-122213 

это просто сома e basic, а не комплект OSGi:

Manifest-Version: 1.0 
Archiver-Version: Plexus Archiver 
Created-By: Apache Maven 
Build-Jdk: 1.6.0_45 
Main-Class: activator.Activator 

Итак, как мне настроить?

+0

Ну, ну, если вы хотите, чтобы ваши личные отношения внутри пакета (хотя и возможны, если вы являетесь частным пакетом), не рекомендуется. OSGi - это все о модульности. Почему вы хотите поместить все ваши зависимости в комплект? – codesalsa

+0

В чем причина использования плагина сборки? maven-bundle-plugin имеет встроенную функцию зависимостей. При этом вы можете управлять, какой пакет должен быть экспортирован из встроенных зависимостей. –

+0

Спасибо, я хочу поставить некоторые классы зависимостей, потому что я хочу запустить некоторый ruby-скрипт в среде osgi, и скрипту нужно использовать некоторые классы из log4j, поэтому мне нужно включить что-то вроде: require "org.apache.log4j.spi. LoggingEvent» – Ryo

ответ

11

Это довольно просто, добавьте следующую строку в файл конфигурации:

<Embed-Dependency>dependencies</Embed-Dependency> 

Это в основном это. Полная документация может быть найдена на Felix-Maven-Bundle-Plugin и получения более подробной информации о том, как BND работы можно найти на aqute

Что касается, передовой практики в том числе. Если это то, что нужно только вашему приложению и в основном скрыто, вложение этих зависимостей может быть допустимым решением. Если вы повторно используете этот материал, вам следует подумать о создании «заштрихованного» пучка

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