标签: maven-bundle-plugin

如何使用maven-bundle-plugin的bnd指令?

如何使用maven-bundle-plugin中的bnd指令指令?bnd指令以' - '字符开头,这是一个无效的xml标记:

<-foo>bar</-foo>
Run Code Online (Sandbox Code Playgroud)

我已经检查了maven-bundle-plugin 的官方页面,他们说它应该以' - '字符开头:

指令 - 任何以" - "字符开头的指令都被视为指示BND执行某些特殊处理而不会复制到清单的指令.

包目标的描述似乎并不具备这种信息也是如此.执行一些特殊处理并且不会复制到清单.

osgi maven bnd maven-bundle-plugin

4
推荐指数
2
解决办法
1618
查看次数

当使用带有maven-bundle-plugin的"bundle"打包时,目标会被执行两次

我有一个(简单的)maven项目包装类型"捆绑"使用org.apache.felix:maven-bundle-plugin:2.5.4.它产生一个正确的OSGI束罐.但是我观察到所有目标都至少执行了两次.我该如何防止这种情况?问题是某些目标(本例中的checkstyle)很慢,因此重复执行是一个问题.

注意:我从命令行使用maven 3.2.5.

输出或mvn clean install(删除所有不相关的信息).请注意,许多插件执行4次.maven-checkstyle-plugin被执行了两次.

[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ my-project ---
[INFO] --- maven-enforcer-plugin:1.4:enforce (enforce-maven) @ my-project ---
[INFO] --- maven-resources-plugin:2.7:resources (default-resources) @ my-project ---
[INFO] --- maven-compiler-plugin:3.3:compile (default-compile) @ my-project ---
[INFO] --- maven-resources-plugin:2.7:testResources (default-testResources) @ my-project ---
[INFO] --- maven-compiler-plugin:3.3:testCompile (default-testCompile) @ my-project ---
[INFO] --- maven-surefire-plugin:2.18.1:test (default-test) @ my-project ---
[INFO] >>> maven-bundle-plugin:2.5.4:bundle (default-bundle) > package @ my-project >>>
[INFO] --- maven-enforcer-plugin:1.4:enforce (enforce-maven) @ my-project --- …
Run Code Online (Sandbox Code Playgroud)

java maven maven-bundle-plugin

4
推荐指数
1
解决办法
5803
查看次数

如何处理来自Bundle-Classpath上的jar的Import-Package条目?

我在Bundle-Classpath上放了一些罐子。下面的行显示了我的pom.xml中的条目,该条目使用Felix插件为捆绑包创建manigest.mf。

<Bundle-ClassPath>.,lib/com.springsource.org.h2-1.0.71.jar,lib/com.springsource.org.apache.lucene-2.3.2.jar,lib/com.springsource.org.apache.lucene.search-2.3.2.jar</Bundle-ClassPath>
Run Code Online (Sandbox Code Playgroud)

这些罐子都有导入包的类,但是从我的看到,它们都具有MANIFEST.MF,它具有自己的(准确的)Import-Package语句列表。

但是,当我构建项目(使用Maven和bundle插件)时,它报告错误,因为它无法解析对某些类的引用。具体的错误是:

Unresolved references to [com.sun.tools.javac, javax.naming, javax.naming.spi, javax.servlet, javax.servlet.http, javax.sql, javax.transaction.xa]
Run Code Online (Sandbox Code Playgroud)

所有这些错误都来自com.springsource.org.h2-1.0.71.jar,所有这些软件包都导入了该jar的清单中。

我无法理解:

  • 如果这些软件包已经导入com.springsource.org.h2-1.0.71.jar的MANIFEST> MF中,为什么会抱怨呢?
  • 为什么问题仅来自com.springsource.org.h2-1.0.71.jar?我尝试删除了特定的jar,即使com.springsource.org.apache.lucene.search-2.3.2.jar在MANIFEST.MF中也有几个Import-Package条目,构建过程仍然可以正常进行?

关于第二点,我做了一些调查,觉得有一种模式。com.springsource.org.apache.lucene.search-2.3.2.jar在清单中指定的所有导入都由com.springsource.org.apache.lucene-2.3.2.jar满足,该文件也已指定在Bundle-Classpath上。

com.springsource.org.apache.lucene-2.3.2.jar(在Bundle-Classpath上)满足的com.springsource.org.h2-1.0.71.jar依赖项未在错误消息,但是,错误消息中列出了Bundle-Classpath上的jar不满足的那些依赖关系。

不太确定发生了什么。关于Bundle-Classpath中指定的jar文件的规则是什么?是否必须在其主项目的pom中列出其清单的导入(即使在Import-Package中指定了导入)元素?还是这是Maven捆绑插件强制执行的事情?如果是后者,是否有办法摆脱执行?

osgi maven-bundle-plugin osgi-bundle

3
推荐指数
1
解决办法
3万
查看次数

如何使用Maven包插件将包中的包排除在外

我有一个捆绑包,使用maven-jaxb2-plugin生成所有要定位到target / generated / src / main / java的类。然后,我使用Maven捆绑包插件创建捆绑包。它只是有效。

现在,我想从此捆绑包中排除(删除)生成的包com.xxx.yyyy.common。所以我用:

<Export-Package>
     !com.xxx.yyyy.common,com.xxx.*
</Export-Package>
Run Code Online (Sandbox Code Playgroud)

但是在拥有捆绑包之后,该包裹仍会留在捆绑包内。

osgi pom.xml maven-bundle-plugin

3
推荐指数
1
解决办法
1806
查看次数

计划在 maven-bundle-plugin 中支持“Require-Bundle”

是否有计划在 maven-bundle-plugin 中支持“Require-Bundle”,即使它不是推荐的 OSGi 方式。在某些情况下,使用“Require-Bundle”是有意义的,例如合并拆分的包。

osgi maven maven-bundle-plugin

2
推荐指数
1
解决办法
2347
查看次数

使用 maven-bundle-plugin 在 JAR 中嵌入依赖项不起作用

我成功地将 OSGi 特定元数据添加到 Flying-saucer-pdf Maven 工件的 MANIFEST 中。但是,我没有成功将该工件的依赖项和传递依赖项嵌入到创建的 JAR 文件中。

我使用来自 GitHub [1] 的 Flying-saucer-pdf 的原始来源,并将以下语句添加到 pom.xml 文件中:

<plugin>
    <artifactId>maven-jar-plugin</artifactId>
    <configuration>
      <archive>
        <manifestFile>${project.build.outputDirectory}/META-INF/MANIFEST.MF</manifestFile>
      </archive>
    </configuration>
  </plugin>
  <plugin>
    <groupId>org.apache.felix</groupId>
    <artifactId>maven-bundle-plugin</artifactId>
    <executions>
      <execution>
        <id>bundle-manifest</id>
        <phase>process-classes</phase>
        <goals>
          <goal>manifest</goal>
        </goals>
        <configuration>
          <instructions>
            <Embed-Dependency>itext</Embed-Dependency>
            <Embed-Transitive>true</Embed-Transitive>
          </instructions>
        </configuration>
      </execution>
    </executions>
  </plugin>
Run Code Online (Sandbox Code Playgroud)

该工件在其原始 pom.xml 中声明了对 itext 版本 2.1.7 的依赖项,我没有触及该依赖项。我也没有弄乱工件的原始包装类型,即 jar。

不幸的是,这仅完成了部分工作。MANIFEST.MF 似乎正确并且包含预期的 OSGi 标签:

Manifest-Version: 1.0
Bundle-Description: Flying Saucer is a CSS 2.1 renderer written in Jav
 a.  This artifact supports PDF output.
Bundle-License: http://www.gnu.org/licenses/lgpl.html
Bundle-SymbolicName: org.xhtmlrenderer.flying-saucer-pdf …
Run Code Online (Sandbox Code Playgroud)

osgi jar flying-saucer maven-bundle-plugin osgi-bundle

2
推荐指数
1
解决办法
4368
查看次数

未解决的要求:osgi.component

我正在尝试开发一个包含REST API和来自定制服务的OSGi WAB的Karaf.然而,由于一些奇怪的原因,OSGi框架抱怨不满意的能力,osgi.component.

我想知道:

  1. 我该如何解决这个问题?
  2. 什么是osgi.component捆绑?为什么需要?
  3. 为什么maven-bundle-plugin(从而也是bnd),在条目"Require-Capability"中声明它?
  4. 如果我需要在OSGi框架上安装它,我可以在哪里找到它?

一些其他信息:

  • karaf版本:4.0.7;
  • maven bundle插件:3.2.0;
  • 操作系统:Windows 10 64位;
  • IDE:Eclipse Neon;

一些代码提供其他信息:

整个错误:

执行命令时出错:在bundle上执行命令时出错:启动bundle 96时出错:无法解析com.massimobono.karaf.examples.user-fully-rest [96](R 96.0):缺少需求[com.massimobono.karaf.examples.用户完全休息[96](R 96.0)] osgi.extender; (&(osgi.extender = osgi.component)(版本> = 1.3.0)(!(版本> = 2.0.0)))未解决的要求:[[com.massimobono.karaf.examples.user-fully-rest [ [96 96](R 96.0)] osgi.extender; (&(osgi.extender = osgi.component)(版本> = 1.3.0)(!(版本> = 2.0.0)))]

清单文件:

Manifest-Version: 1.0
Bundle-SymbolicName: com.massimobono.karaf.examples.user-fully-rest
Archiver-Version: Plexus Archiver
Built-By: massi
Bnd-LastModified: 1479908575162
Bundle-ActivationPolicy: lazy
Bundle-ManifestVersion: 2
Import-Package: com.massimobono.karaf.examples.user;version="[0.0,1)",
 com.massimobono.karaf.examples.user.service;version="[0.0,1)",javax.w
 s.rs;version="[2.0,3)",javax.ws.rs.core;version="[2.0,3)"
Require-Capability: osgi.extender;filter:="(&(osgi.extender=osgi.compo
 nent)(version>=1.3.0)(!(version>=2.0.0)))",osgi.service;filter:="(obj
 ectClass=com.massimobono.karaf.examples.user.service.UserService)";ef
 fective:=active,osgi.ee;filter:="(&(osgi.ee=JavaSE)(version=1.8))"
Service-Component: OSGI-INF/com.massimobono.karaf.examples.user.ui.ful
 lyrest.UserRest.xml
Tool: Bnd-3.2.0.201605172007
Originally-Created-By: …
Run Code Online (Sandbox Code Playgroud)

osgi maven-bundle-plugin wab osgi-bundle karaf

2
推荐指数
1
解决办法
3054
查看次数

在 OSGi 容器中找不到 OpenSAML3 资源“default-config.xml”

我正在尝试使用 opensaml servicemix bundle ( org.apache.servicemix.bundles:org.apache.servicemix.bundles.opensaml:jar:3.2.0_1)在 Apache Karaf (4.0.5) 上运行的 OSGi 包中升级到 OpenSAML 3 。

解析 SAML 的测试正在运行,所以我认为我走在正确的轨道上。但是,如果我安装上Karaf我捆得到一个“资源未找到”当它试图加载错误default-config.xml

2016-06-21 16:29:10,477 | INFO  | ool-120-thread-1 | InitializationService            | 388 - org.apache.servicemix.bundles.opensaml - 3.2.0.1 | Initializing OpenSAML using the Java Services API
2016-06-21 16:29:10,478 | DEBUG | ool-120-thread-1 | InitializationService            | 388 - org.apache.servicemix.bundles.opensaml - 3.2.0.1 | Initializing module initializer implementation: org.opensaml.core.xml.config.XMLObjectProviderInitializer
2016-06-21 16:29:10,487 | DEBUG | ool-120-thread-1 | XMLConfigurator                  | 388 - org.apache.servicemix.bundles.opensaml - 3.2.0.1 | …
Run Code Online (Sandbox Code Playgroud)

java osgi opensaml maven-bundle-plugin osgi-bundle

1
推荐指数
1
解决办法
1348
查看次数

felix maven-bundle-plugin 错误 (&amp;(osgi.wiring.package=com.abc)(version&gt;=xx.0.0)(!(version&gt;=yy.0.0)

我使用Apache Felix来实现osgi包并将其用作嵌入式Felix框架来调用boundle

这是我的 Maven 插件来构建 MANIFEST.MF :

<plugin>
            <groupId>org.apache.felix</groupId>
            <artifactId>maven-bundle-plugin</artifactId>
            <version>3.5.0</version>
            <extensions>true</extensions>
            <configuration>
                <instructions>
                    <Embed-Dependency>*;scope=compile|runtime</Embed-Dependency>
                    <Bundle-Activator>a.b.c.osgi.activator.Activator</Bundle-Activator>
                </instructions>
            </configuration>
        </plugin>
Run Code Online (Sandbox Code Playgroud)

我构建项目,然后在嵌入的 felix 中使用 jar 文件,如下所示

BundleContext bundleContext = f.getBundleContext();
    Bundle bundle = bundleContext.installBundle(
            "file:/home/eclipse_workSpace/my-module/target/abc-1.1.0.jar");)

    String bName = bundle.getLocation();
    bundle.getRegisteredServices();
    bundle.getState();

    /* Bundle[] bls = bundleContext.getBundles(); */

    System.out.println("starting bundle " + bName);
    bundle.start();
Run Code Online (Sandbox Code Playgroud)

当我开始 Boundle 时,我遇到了这个异常

线程“main”中的异常 org.osgi.framework.BundleException:无法解析 abc [1](R 1.0):缺少要求 [abc [1](R 1.0)] osgi.wiring.package;(&(osgi.wiring.package=com.google.common.base)(version>=21.0.0)(!(version>=22.0.0))) 未解决的要求:[[abc [1](R 1.0) ] osgi.wiring.package;(&(osgi.wiring.package=com.google.common.base)(版本>=21.0.0)(!(版本>=22.0.0)))]

我应该怎么做才能解决这个问题?

osgi apache-felix maven-bundle-plugin

0
推荐指数
1
解决办法
831
查看次数