maven - 为什么Maven找不到osgi bundle依赖项?

标签 maven osgi bundle m2eclipse

我已经在我的Maven项目中将OSGi捆绑软件声明为依赖项。 (它恰好是felix容器。)

<dependency>
    <groupId>org.apache.felix</groupId>
    <artifactId>org.apache.felix.framework</artifactId>
    <version>4.0.2</version>
    <type>bundle</type>
    <scope>compile</scope>
</dependency>


当我尝试构建时,它说找不到。

[ERROR] BUILD ERROR
[INFO] ------------------------------------------------------------------------
[INFO] Failed to resolve artifact.

Missing:
----------
1) org.apache.felix:org.apache.felix.framework:bundle:4.0.2

  Try downloading the file manually from the project website.


但是,快速浏览一下Central即可确认此工件确实存在。我注意到,如果将其更改为“ jar”类型,它将确实为我下载jar(捆绑包)。是什么让我开始思考,为什么首先要把它叫做捆绑?好吧,我这样做是因为当我使用m2e查找工件时,它称其为“捆绑包”。实际上,m2e生成了我上面引用的那些坐标。

捆绑包不是有效的Maven工件类型吗?如果没有,为什么m2e会这样称呼它?

最佳答案

如公认的答案中所述,这不是m2e方面的故障。问题是行家不知道“捆绑”的类型是什么。因此,您需要添加一个定义它的插件,即maven-bundle-plugin。请注意,您还需要将extensions属性设置为true。所以POM应该有类似

<plugin>
      <groupId>org.apache.felix</groupId>
      <artifactId>maven-bundle-plugin</artifactId>
      <version>2.4.0</version>
      <extensions>true</extensions>
</plugin>


可接受答案的问题在于,如果类型捆绑包的依赖关系是直接依赖关系,则它可以工作;由于是您的pom声明它,因此只需删除该类型即可。但是,如果您的依赖项本身具有bundle类型的依赖项,那么您会被搞砸,因为然后您的一个传递依赖项就是bundle类型,并且您不能只是删除其中的类型,因为您不是该工件的所有者并且没有访问pom,您的当前执行再次无法理解。它将尝试寻找repo/your-dependency.bundle

使用依赖插件复制依赖项时遇到了这个问题。在这种情况下,插件依赖关系必须包含在插件本身中。您只需要依赖插件来了解bundle插件:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-dependency-plugin</artifactId>
    <dependencies>
        <dependency>
            <groupId>org.apache.felix</groupId>
            <artifactId>maven-bundle-plugin</artifactId>
            <version>2.4.0</version>
            <type>maven-plugin</type>

        </dependency>
    </dependencies>
    <extensions>true</extensions>
</plugin>

关于maven - 为什么Maven找不到osgi bundle依赖项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9932923/

相关文章:

java - 防止从 Git 存储库 pull 时需要 "add external jars"

java - 如何在 Equinox 中定义类路径目录?

asp.net-mvc-4 - 如何解决Antlr3依赖 hell

java - Maven jar :jar not gathering dependencies

java - Maven - 如何通过命令行为java项目创建pom.xml

eclipse - Equinox 3.10 中的签名内容支持

osgi - Karaf 4.1 - 如何在第三方 osgi jar 包中添加 DynamicImport-Package 标签?

ruby-on-rails - 命令 bundle exec rake Assets :precompile错误

javascript - 好的编码 : modularized js files or one big js file?

java - 用于执行 Java 项目的 Bash 脚本