java - 从 maven 切换到 gradle 来管理一个 osgi 大项目(>200 包)

标签 java maven osgi apache-felix cradle

我们有一个大的(~215 个包,并且还在增加)osgi (felix+springdm) 项目,使用 maven 和 maven-osgi 插件构建。

我们有几个maven方式的问题:

1.子模块 pom 必须从父 pom 继承以利用公共(public)变量和依赖项(没关系),但是父 pom 必须包含所有包 pom 才能将所有内容构建在一起。这种循环引用使得保持所有同步变得非常困难。

2。子包的单独版本控制非常复杂,以至于(在我加入项目之前)决定对所有包使用相同的版本。这意味着我们现在也会为每个版本更新所有 bundle 的版本,即使实际上只是更改了其中的一部分。这使得 osgi 的整个概念有点毫无意义恕我直言。请注意,我并不是说我们会继续只接触一小部分 bundle ,我们会处理所有这些 bundle ,但每个版本通常包含 1 或 2 个功能,这些功能只会影响一些 bundle 。

3。为了完成最终 Artifact 的打包和部署,我们还需要另一个子模块来导入部署所需的所有包(除了一些用于测试和模拟的包)。 [编辑] 请注意,此聚合与主 pom 中的聚合不同,因为它不编译包,而只是从 maven 存储库中挑选它们。

4. Maven 依赖系统和 osgi 插件导入有时很难保持一致。忘记导入或放置错误的依赖项太容易了。

[编辑] 在每个 bundle pom 中都有这样的部分: `

         <plugin>
            <groupId>org.apache.felix</groupId>
            <artifactId>maven-bundle-plugin</artifactId>
            <extensions>true</extensions>
            <configuration>
                <instructions>
                    <Export-Package>
                    </Export-Package>
                    <Import-Package>
                        com.google.gson,
                        org.apache.log4j,
                        org.apache.log4j.spi,
                        org.dom4j,
                        com.myinterfaces
                    </Import-Package>
                </instructions>
            </configuration>
        </plugin>`

出于所有这些原因,我们对 maven 还不错,但不是很满意。最近有人提出 Gradle 不是 Elixir ,而是对当前情况的明确改进。

您会推荐迁移到 gradle 吗?哪种方法最好?

有没有人遇到过同样的情况?我认为它应该适用于所有使用 Osgi 的大型项目。

免责声明:我寻找过类似的问题,例如:

Buildr, Gradle or wait for Maven 3?

Looking for a good dev environment for OSGi bundles

Maven : OSGI, bundles and multi-modules projects

但无论是哪里与 osgi 子模块无关或与 gradle 无关。

最佳答案

  1. 您可以将父模块和聚合 maven 模块分开,因为正如您正确观察到的那样,目前您的父 pom 具有两个角色。更多信息可以在 Maven Introduction to POM 中找到.
  2. 除非你使用API Tools,否则恐怕捆绑版本管理不会变得更容易。 .如果 API 工具可以集成为 Maven 插件,也许会很棒,但我不知道这方面的任何工作。因此,您要么一次接触所有版本,要么在每次需要时更新它们。 API 工具将在此处提供很大帮助,但它仅适用于 bundle ,这些 bundle 可以作为插件项目导入 Eclipse 中。
  3. 那么,另一个聚合器模块能帮上忙吗?您可以设置多个聚合器,这些聚合器聚合另一个聚合器,这样您就不会得到一个列出所有内容的巨大聚合器模块?因为,您可能不想部署所有内容,您可以设置要从部署中排除的内容。快速谷歌搜索显示了如何做 it .
  4. @Neil Bartlett 已经指出,如果您正确设置了依赖项,bnd 将处理您的 list 。如果您需要对默认值进行额外调整,您可以随时设置 BND 指令文件。

您可以将第谷放在可能的工具列表中。它将帮助你进行依赖管理,因为你只需要在 list 中指定你的依赖关系,它会允许你使用 API 工具(但还没有集成)。但是,如果您想跳过一些令人头疼的问题(直到 Tycho 改进了对依赖 Maven Artifact 的支持),它会要求您使用 p2 存储库。

关于java - 从 maven 切换到 gradle 来管理一个 osgi 大项目(>200 包),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6235795/

相关文章:

java - 可拖动的工具栏

java - Hadoop 构建错误 127

java - 这段代码有什么问题?

java - Spring MVC - 如何将数据从jsp页面的按钮传递到 Controller ?

JavaFX FXMLLoader InspirationTargetException 和 NullpointerException

java - JNLP找不到使用Maven构建的主类

java - 如何在多个 osgi 包之间共享资源

maven - 为什么不赞成使用maven-bundle-plugin的wrap/bundleall目标?

java - 使用 netbeans 7.1 自动开发 osgi 包

java - 字节方法中可能从 int 到字节错误的有损转换