我们有一个很大的(约 215 个捆绑包并且还在计数)osgi (felix+springdm) 项目,使用 maven 和 maven-osgi 插件构建。
maven方式有几个问题:
1. 子模块 pom 必须从父 pom 继承以利用公共变量和依赖项(没关系),但是父 pom 必须包含所有包 pom 才能将所有内容构建在一起。这种循环引用很难保持同步。
2. 子包的单独版本控制非常复杂,以至于(在我加入项目之前)决定对所有包使用相同的版本。这意味着我们现在更新每个版本的所有捆绑包的版本,即使其中只有一堆实际上发生了变化。恕我直言,这使得 osgi 的整个概念变得毫无意义。请注意,我并不是说我们继续只接触少数捆绑包,我们会处理所有这些捆绑包,但每个版本通常包含 1 或 2 个功能,这只会影响一些捆绑包。
3. 为了完成最终工件的打包和部署,我们还需要另一个子模块来导入部署所需的所有包(除了少数几个用于测试和模拟)。[已编辑] 请注意,此聚合与主 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 不是万能药,而是对当前情况的明确改进。
你会建议搬到gradle吗?如果这是最好的方法?
有没有其他人经历过同样的情况?我认为对于所有使用 Osgi 的大型项目来说,它应该是通用的。
免责声明:我寻找类似的问题,例如:
但无论是在哪里不是关于 osgi 子模块或不是关于 gradle。