我正在使用Maven 2将我的应用程序开发为一组OSGi包。从其他OSGi包中使用了一些常用功能,例如日志记录,Web服务器等,例如,我使用的是JetG的OSGi版本
我想发送我的应用程序包含所有第三方包和一个OSGi容器。我选择了Apache Felix作为我的默认容器。
我对Maven很新,我不知道如何编写执行此操作的POM文件,但在Maven book中找不到相似的示例。核心观点似乎是多模块项目不会创建自己的工件。
它确实构建了我的bundle并将其打包成OSGI兼容的JAR文件(使用maven-bundle-plugin)。现在我想要它包装其他东西(不需要构建或任何东西,只需拉入并放入包中)并生成这样的ZIP文件:
+-Archive Root
|
+- /bundles
|
+- my.bundle1.jar
+- my.bundle2.jar
+- 3rd.party.bundle1.jar
+- 3rd.party.bundle2.jar
+- /conf
|
+- ... some config files ...
+- felix.jar
这样,我的用户可以下载ZIP文件,将其解压缩到一个目录,说“MyApp”,然后去
# > java -jar /path/to/MyApp/felix.jar
关于细节的一些注释,如果它们重要:
packaging
设置为“pom”,如本书的示例所示。答案 0 :(得分:2)
在您引用的文档中,有一个标题为嵌入依赖项的部分描述了插件如何解析Maven项目依赖项并将它们添加到类路径和资源中。
插件使用该指令将项目依赖项转换为和子句,然后将这些指令附加到当前指令集并传递给BND。如果您希望嵌入式依赖项位于开头或中间,或者您可以使用{maven-dependencies},它将自动扩展到相关子句。
...
插件使用该指令将项目依赖项转换为和子句,然后将这些指令附加到当前指令集并传递给BND。如果您希望嵌入式依赖项位于开头或中间,或者您可以使用{maven-dependencies},它将自动扩展到相关子句。
在下面的示例中,{maven-dependencies}占位符将被扩展为包含作为范围运行时的项目依赖项或编译为Include-Resource和Bundle-Classpath元素。
<!-- embed all compile and runtime scope dependencies -->
<Embed-Dependency>*;scope=compile|runtime</Embed-Dependency>
<Include-Resource>
{maven-resources},{maven-dependencies}
</Include-Resource>
<Bundle-ClassPath>.,{maven-dependencies},some.jar</Bundle-ClassPath>
通常,插件只检查直接依赖关系,但可以通过以下选项更改为包含完整的传递依赖关系集:
<Embed-Transitive>true</Embed-Transitive>
如果您想要内联依赖项而不是嵌入式,请添加inline = true。例如,内联所有编译和运行时范围的依赖项使用:
<Embed-Dependency>*;scope=compile|runtime;inline=true</Embed-Dependency>
答案 1 :(得分:2)