Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
仅在构建服务器中使用Maven,而不是在开发人员中使用_Maven_Jenkins_Continuous Integration_Osgi - Fatal编程技术网

仅在构建服务器中使用Maven,而不是在开发人员中使用

仅在构建服务器中使用Maven,而不是在开发人员中使用,maven,jenkins,continuous-integration,osgi,Maven,Jenkins,Continuous Integration,Osgi,目前,开发人员正在处理多个OSGi捆绑包,这些捆绑包也通过OSGi导入/导出相互使用。Eclipse用于开发和测试 现在,我们将设置一个CI服务器(Jenkins),它应该使用Maven构建所有osgi包(来自repo)。因此,只有在CI服务器中才需要maven。这也意味着,开发人员在他们的工作站上开发时既看不到也不关心pom.xml,因为他们与maven没有联系 我的第一个问题是,如果可能的话。当开发人员更改清单上的导入和导出时,maven必须知道这一点,以使编译器可以使用这些依赖项。例如,m

目前,开发人员正在处理多个OSGi捆绑包,这些捆绑包也通过OSGi导入/导出相互使用。Eclipse用于开发和测试

现在,我们将设置一个CI服务器(Jenkins),它应该使用Maven构建所有osgi包(来自repo)。因此,只有在CI服务器中才需要maven。这也意味着,开发人员在他们的工作站上开发时既看不到也不关心pom.xml,因为他们与maven没有联系

我的第一个问题是,如果可能的话。当开发人员更改清单上的导入和导出时,maven必须知道这一点,以使编译器可以使用这些依赖项。例如,maven想要构建BundleB,它从BundleA导入包a。通常,pom.xml会在Bundle a上包含一个maven依赖项(之前必须将其部署到本地maven repo)。但是,当开发人员只更改捆绑包中的MANIFEST.MF时,pom.xml中没有条目。maven是否可能通过解析清单来确定正确的maven依赖关系?或者另一个解决方案:告诉maven一个包含所有预构建JAR的类路径

我的第二个问题是,是否建议只在ci服务器上使用maven,而不在开发人员上使用


关于

如果开发人员不使用maven,那么他们在构建中使用什么。我认为有一个自动构建系统是有意义的。因此,您应该在开发人员系统上使用maven或类似的gradle

另一个问题是手工维护清单文件是否有意义。这是PDE在eclipse中的工作方式,但我认为在构建期间创建清单更有效。这可以通过使用felix的maven bundle插件来实现。那样工作容易多了

有关一些示例,请参见


你可以选择的另一个方法是调查他们的gradle版本。它有点特别,但非常方便。

实际上,我们的开发人员并不真正构建。他们在eclipse(基本上是一个osgi容器)中编译并运行他们的osgi包。。。我从十年前就知道这种工作方式…:-)别开玩笑了。。问题是:如果开发人员无法构建应用程序,他如何确保CI服务器上的构建工作正常?到目前为止,开发人员始终必须检查完整的产品(多个osgi捆绑包/项目),并使用eclipse的导出功能创建最终的osgi捆绑包JAR。现在,开发人员仍然应该检查完整的产品,并在本地Eclipse环境中测试它们。但新的事情应该是CI服务器构建osgi捆绑包,作为下一步,应该在osgi容器中进行自动化集成测试,该容器只运行应用程序,而不是开发人员使用的eclipse equinox混合。这是有道理的,但我会为开发人员和CI机器使用相同的构建。因此,开发人员可以进行构建,并且只有在所有功能都在他们的机器上运行时才能签入。这将减少失败的构建并保持代码库的高质量。CI提供了一个不受开发人员影响的“中立”环境。我经常遇到这样的情况:构建对我有效,但在CI系统上无效。通常,我要么有一些特殊的设置,要么在本地maven repo中有一个其他地方不可用的快照。因此,虽然开发人员构建是一件好事,但您始终需要在中立实例上构建,以确保构建不仅在单个开发人员机器上工作。有关POM first与MANIFEST first的比较,请参见至。