在我的公司,我们正在Hadoop上开发MapReduce应用程序。关于这些项目的依赖管理存在争议,我想听听你的意见。
我们正在使用Cloudera的Hadoop发行版(CDH)。
我们的开发工作流程:
还在我身边吗?
现在争论的焦点是定义MapReduce和Oozie项目的这些依赖关系。有两个观点。
有人说不需要在POM文件中定义这些依赖项(即构建项目不需要的依赖项),而是将它们放在HDFS的共享目录中,并始终假设它们在那里。
优点:
缺点:
那你们觉得怎么样?
编辑:忘了写,但很明显,第二个选项是定义所有依赖项 - 即使它们将重复大多数项目并需要一些维护。答案 0 :(得分:0)
我为第二个投票,这意味着处理和维护每个项目的依赖项而不是共享目录。导致问题是共享目录将随着时间的推移而改变,并且在一段时间之后其他项目将不再工作,因为有人删除了一些依赖项等。所以最好将依赖项保存到它们预期的pom中。此外,任何项目都将开箱即用,而不依赖于共享目录的当前状态。
您可能会想到一个父pom,它包含一些应该使用的默认依赖项。这可以通过dependencyManagement部分中的定义来处理,并且特定项目定义没有版本的真实依赖项。 另一种解决方案可能是使用import scope。
<dependency>
<groupId>yourGroupIdy</groupId>
<artifactId>YourArtifactId</artifactId>
<version>1.0</version>
<scope>import</scope>
</dependency>
通过这个,可以有一组定义的依赖项,只需要在这个负责依赖项的单个pom项目中维护每个项目。