2012-03-30 48 views
1

我正在与Eclipse,Spring,Java和Tomcat一起使用Subversion进行版本控制。我正在尝试第一次尝试使用Maven,但我已经看到的一件事情是我不喜欢的是,如果我使用maven启动项目,它会将所有依赖项下载到我的.m2文件夹中,并将所有类路径下载到项目,但我们希望所有的依赖项都进入WEB-INF/lib,所以我们可以将它们检入到Subversion中。Maven能否将依赖关系拉入项目中?

这可以用Maven完成吗?应该这样做吗?

+2

为什么您需要将依赖项提交到源代码库? – nobeh 2012-03-30 16:01:44

+1

这样,您就可以立即从存储库中重建项目。让新雇员能够毫不费力地构建系统至关重要。 – Hiro2k 2012-03-30 16:06:55

+0

我会提出一个不同的观点,即你想要做的事实际上是许多项目达到一定复杂度和/或团队规模的首选。我已经构建了许多Java应用程序,从命令行到桌面用户界面,到JEE和其他Web应用程序,并像您描述的那样手动管理依赖关系。我也参与了几个Maven驱动的项目。毫无疑问,我可以毫无疑问地明确指出,方法(包括直接在项目中的依赖关系)更容易建立和维护,IMO。对我而言,Maven是解决问题的一个很好的例子。 – 2012-03-30 16:15:32

回答

3

将二进制包检入到你的源代码控制中并不是很理想,而且与maven相反。当这些在线存储库停机并且解决方案是使用像Artifactory之类的东西来托管自己的存储库时,会发生什么情况是一个有效的担忧。有些人不喜欢他们必须与源代码控制器一起维护另一个系统,但是值得它来获得maven带给桌面的所有功能。

+2

源代码回购中的二进制文件是一个很大的错误,特别是当你开悟并转向像git或bzr这样的分布式SCM时,它会下载整个回购历史记录。 – artbristol 2012-03-30 16:11:07

+0

我无法反驳更多。 Java依赖关系(JAR)不会经常更改,因此“下载整个历史记录”参数并不成立。 – 2012-03-30 16:17:33

+1

但他们确实频繁更换,您决定不更新到新版本是另一回事。 – Hiro2k 2012-03-30 18:05:33

2

您可以借助Maven下载依赖关系(例如通过使用maven-dependeny-plugin),但大多数情况下您肯定不想这样做。

Why not Store JARs in CVS?(或任何其他版本控制系统):

  • 它使用更少的存储 - 而库通常是相当大的,因为每个JAR只保存在它实际上是节省空间的一个地方,即使它看起来不是这样
  • 它使检出一个项目更快 - 初始结帐,并在一个小程度更新,如果CVS中没有大的二进制文件,项目会更快。尽管无论如何可能需要再次下载它们,但这只会发生一次,对于已经存在的一些常见JAR可能不需要。
  • 不需要版本控制 - CVS和其他源代码控制系统是为版本控制文件而设计的,但是外部依赖通常不会改变,或者如果他们改变文件名以改变版本。将它们存储在CVS中并没有比保留在本地工件缓存中更多的好处。
2

了解Maven最重要的一点是项目的依赖关系不应该检入版本控制(不取决于哪个版本控制)。 Maven的想法是只在一个地方有$ HOME/.m2/repository。这意味着对于您正在工作的每个项目,您的硬盘驱动器上只有一次依赖关系。依赖关系管理可以轻松地添加/更改/删除项目中的依赖关系。此外Maven的不仅手柄依赖它会支持你做单元/集成测试创建报告代码覆盖等等,还有更多。如果你真的想与Maven合作,你应该建立像Nexus,Artifactory或Archiva这样的Repository Manager。

最重要的一点是,如果您不喜欢Maven的工作方式,那么您的手指就会离开Maven,否则您将无法接受挑战。如果你喜欢使用maven,你必须接受Maven Way