Java 我应该使用Eclipse插件(或OSGi捆绑包)作为普通的依赖关系管理工具吗?
事情又一次发生了。。。我加入了一个新项目,它由几个简单的Eclipse Java项目组成,具有相互依赖性,所有这些项目都通过项目构建路径进行管理。我觉得这一切有点混乱。当涉及到运行配置时,您只需进入地狱Java 我应该使用Eclipse插件(或OSGi捆绑包)作为普通的依赖关系管理工具吗?,java,eclipse,maven-2,osgi,dependency-management,Java,Eclipse,Maven 2,Osgi,Dependency Management,事情又一次发生了。。。我加入了一个新项目,它由几个简单的Eclipse Java项目组成,具有相互依赖性,所有这些项目都通过项目构建路径进行管理。我觉得这一切有点混乱。当涉及到运行配置时,您只需进入地狱 在过去,我坚持创建插件项目,而不是普通的Java项目——即使我从未打算将这些项目作为osgi捆绑包运行。我只是发现依赖关系在插件项目中更容易管理。其他人也走同样的路吗?反对这种方法吗?这听起来是一种有趣的方法,但我个人认为最好使用外部构建工具(如Ant或Maven)来管理构建依赖关系,而不是将构
在过去,我坚持创建插件项目,而不是普通的Java项目——即使我从未打算将这些项目作为osgi捆绑包运行。我只是发现依赖关系在插件项目中更容易管理。其他人也走同样的路吗?反对这种方法吗?这听起来是一种有趣的方法,但我个人认为最好使用外部构建工具(如Ant或Maven)来管理构建依赖关系,而不是将构建绑定到IDE。如果您使用maven和m2eclipse插件,那么在加载maven POM时,如果其他项目也在您的工作区中,它将自动设置Eclipse项目依赖项 不幸的是,如果您的团队目前正在使用特别的依赖关系管理,那么他们不太可能会想要跳转到Maven。再说一次,也许他们只是需要一个领导者来领导这项工作。如果你读了这篇文章,那么这个项目正是这样做的:
- 所有依赖项都将在OSGi包清单文件中表示,这些文件指定类路径(用于库JAR)和“必需”包。
出于构建和测试的目的,必须包括部署环境中预期或希望使用的库(例如,
或XML
),但不包括在装运产品中。这些包可以指定为“可选”必需包或必需包JRocket
- 初始二进制程序集将通过通常的bundle程序集工作,bundle输出包括来自所需的bundle片段(但不是来自可选bundle)的二进制文件
好处还包括OSGi的版本方面,它允许指定依赖项的最小和最大预期版本。我个人不会使用插件项目,我会使用构建工具,如Ant、Maven和其他工具 如果没有集成构建系统,这意味着公司对软件开发了解不多
我不会承担引入构建系统的所有责任,可能需要额外的时间。如果他们不想迁移,我建议您尽快开始寻找另一份工作。我认为您的方法非常合理,即使用OSGi进行依赖关系管理,即使您不会在OSGi容器中运行,因为最终它将导致更多的模块化代码。模块化代码更容易重构,更容易在多个开发人员之间分发。您甚至不需要扩展任何OSGi类,因此不需要创建任何其他依赖项 另一方面,Ken Liu关于使用外部依赖关系管理的建议也有它的优点,因为像Maven这样的东西会为您处理很多依赖关系和管理
把两者结合起来,你就能两全其美。OSGi可以使用诸如和之类的附加库与Maven一起工作。这里有两个独立的问题
最终,这个问题会让你觉得更容易处理;两种类型的依赖关系,或者只是一种依赖关系。如果您想要一个,那么您需要在m2eclipse(它从maven POM生成项目依赖项)或使用pax构造(它可以从maven POM生成清单)之类的东西上投入时间。或者使用两个依赖关系管理系统。我同意,在Eclipse中,使用OSGi管理项目依赖关系比添加项目或库引用的传统方式更容易 然而,如果您在开发时推广依赖关系管理的OSGi方式,那么开发人员将需要学习OSGi,并且在遇到类可见性问题时会付出代价 您是否使用
Require Bundle
或Import Package
来管理依赖项?尽管OSGi不推荐使用requirebundle
,但从开发时依赖关系管理的角度来看,它可能更适合
除非您使用的是Maven插件之类的东西,否则Eclipse在Eclipse内部和外部有着完全不同的编译/运行方法,这让人恼火,同时还要维护两个并行编译/运行系统。OSGI是一个标准,有三个主要实现—Eclipse Equinox、Apache Felix和Makewave Knoplerfish。OSGi在多个IDE中受支持,也可以在任何IDE之外开发。它绝对不会将您绑定到IDE。