我已经在我的maven项目中声明了一个OSGi bundle作为依赖. (它恰好恰好是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.
但是,在中央快速查看会验证这个神器确实在那里.我注意到,如果我将它改为“jar”类型,那么它确实会为我下载jar(bundle).这让我想到了,为什么我把它称为捆绑在一起?嗯,我这样做是因为当我使用m2e来查找这些工件时,它被称为“捆绑”;事实上,m2e生成了我上面提到的那些坐标.
捆绑不是有效的maven工件类型?如果不是,为什么m2e称之为?
在接受的答案中提到,这不是m2e的故障.问题是maven不知道什么是“bundle”.所以你需要添加一个定义它的插件,即maven-bundle-plugin.请注意,您还需要将extensions属性设置为true.所以POM应该有类似的东西
原文链接:https://www.f2er.com/javaschema/281828.html<plugin> <groupId>org.apache.felix</groupId> <artifactId>maven-bundle-plugin</artifactId> <version>2.4.0</version> <extensions>true</extensions> </plugin>
接受答案的问题是,如果类型包的依赖是一个直接的依赖关系,它是有效的;因为它是你的pom声明它,你可以删除类型.但是,如果您的依赖关系本身具有类型绑定的依赖关系,那么您将被拧紧,因为您的传递依赖关系之一是捆绑类型,您不能仅仅删除其中的类型,因为您不是该工件的所有者,并且没有访问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>