jjzjj

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

coder 2023-08-30 原文

我们有一个大的(~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 - 从 maven 切换到 gradle 来管理一个 osgi 大项目(>200 包)的更多相关文章

  1. ruby - 使用 Vim Rails,您可以创建一个新的迁移文件并一次性打开它吗? - 2

    使用带有Rails插件的vim,您可以创建一个迁移文件,然后一次性打开该文件吗?textmate也可以这样吗? 最佳答案 你可以使用rails.vim然后做类似的事情::Rgeneratemigratonadd_foo_to_bar插件将打开迁移生成的文件,这正是您想要的。我不能代表textmate。 关于ruby-使用VimRails,您可以创建一个新的迁移文件并一次性打开它吗?,我们在StackOverflow上找到一个类似的问题: https://sta

  2. ruby-on-rails - Rails - 一个 View 中的多个模型 - 2

    我需要从一个View访问多个模型。以前,我的links_controller仅用于提供以不同方式排序的链接资源。现在我想包括一个部分(我假设)显示按分数排序的顶级用户(@users=User.all.sort_by(&:score))我知道我可以将此代码插入每个链接操作并从View访问它,但这似乎不是“ruby方式”,我将需要在不久的将来访问更多模型。这可能会变得很脏,是否有针对这种情况的任何技术?注意事项:我认为我的应用程序正朝着单一格式和动态页面内容的方向发展,本质上是一个典型的网络应用程序。我知道before_filter但考虑到我希望应用程序进入的方向,这似乎很麻烦。最终从任何

  3. ruby-on-rails - 渲染另一个 Controller 的 View - 2

    我想要做的是有2个不同的Controller,client和test_client。客户端Controller已经构建,我想创建一个test_clientController,我可以使用它来玩弄客户端的UI并根据需要进行调整。我主要是想绕过我在客户端中内置的验证及其对加载数据的管理Controller的依赖。所以我希望test_clientController加载示例数据集,然后呈现客户端Controller的索引View,以便我可以调整客户端UI。就是这样。我在test_clients索引方法中试过这个:classTestClientdefindexrender:template=>

  4. ruby-on-rails - 如何从 format.xml 中删除 <hash></hash> - 2

    我有一个对象has_many应呈现为xml的子对象。这不是问题。我的问题是我创建了一个Hash包含此数据,就像解析器需要它一样。但是rails自动将整个文件包含在.........我需要摆脱type="array"和我该如何处理?我没有在文档中找到任何内容。 最佳答案 我遇到了同样的问题;这是我的XML:我在用这个:entries.to_xml将散列数据转换为XML,但这会将条目的数据包装到中所以我修改了:entries.to_xml(root:"Contacts")但这仍然将转换后的XML包装在“联系人”中,将我的XML代码修改为

  5. ruby-on-rails - Ruby on Rails with Haml - 如何从 erb 切换 - 2

    我正在从erb文件切换到HAML。我将hamlgem添加到我的系统中。我创建了app/views/layouts/application.html.haml文件。我应该只删除application.html.erb文件吗?此外,仍然有/public/index.html文件被呈现为默认页面。我想创建自己的默认index.html.haml页面。我应该把它放在哪里以及如何使系统呈现该文件而不是默认索引文件?谢谢! 最佳答案 是的,您可以删除任何已转换为HAML的View的ERB版本。至于你的另一个问题,删除public/index/h

  6. ruby-on-rails - 如果 Object::try 被发送到一个 nil 对象,为什么它会起作用? - 2

    如果您尝试在Ruby中的nil对象上调用方法,则会出现NoMethodError异常并显示消息:"undefinedmethod‘...’fornil:NilClass"然而,有一个tryRails中的方法,如果它被发送到一个nil对象,它只返回nil:require'rubygems'require'active_support/all'nil.try(:nonexisting_method)#noNoMethodErrorexceptionanymore那么try如何在内部工作以防止该异常? 最佳答案 像Ruby中的所有其他对象

  7. ruby - 为什么 SecureRandom.uuid 创建一个唯一的字符串? - 2

    关闭。这个问题需要detailsorclarity.它目前不接受答案。想改进这个问题吗?通过editingthispost添加细节并澄清问题.关闭8年前。Improvethisquestion为什么SecureRandom.uuid创建一个唯一的字符串?SecureRandom.uuid#=>"35cb4e30-54e1-49f9-b5ce-4134799eb2c0"SecureRandom.uuid方法创建的字符串从不重复?

  8. java - 等价于 Java 中的 Ruby Hash - 2

    我真的很习惯使用Ruby编写以下代码:my_hash={}my_hash['test']=1Java中对应的数据结构是什么? 最佳答案 HashMapmap=newHashMap();map.put("test",1);我假设? 关于java-等价于Java中的RubyHash,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/22737685/

  9. ruby-on-rails - rspec should have_select ('cars' , :options => ['volvo' , 'saab' ] 不工作 - 2

    关闭。这个问题需要detailsorclarity.它目前不接受答案。想改进这个问题吗?通过editingthispost添加细节并澄清问题.关闭8年前。Improvethisquestion在首页我有:汽车:VolvoSaabMercedesAudistatic_pages_spec.rb中的测试代码:it"shouldhavetherightselect"dovisithome_pathit{shouldhave_select('cars',:options=>['volvo','saab','mercedes','audi'])}end响应是rspec./spec/request

  10. ruby-on-rails - Rails - 从另一个模型中创建一个模型的实例 - 2

    我有一个正在构建的应用程序,我需要一个模型来创建另一个模型的实例。我希望每辆车都有4个轮胎。汽车模型classCar轮胎模型classTire但是,在make_tires内部有一个错误,如果我为Tire尝试它,则没有用于创建或新建的activerecord方法。当我检查轮胎时,它没有这些方法。我该如何补救?错误是这样的:未定义的方法'create'forActiveRecord::AttributeMethods::Serialization::Tire::Module我测试了两个环境:测试和开发,它们都因相同的错误而失败。 最佳答案

随机推荐