我正在与Eclipse,Spring,Java和Tomcat一起使用Subversion进行版本控制。我正在尝试第一次尝试使用Maven,但我已经看到的一件事情是我不喜欢的是,如果我使用maven启动项目,它会将所有依赖项下载到我的.m2
文件夹中,并将所有类路径下载到项目,但我们希望所有的依赖项都进入WEB-INF/lib
,所以我们可以将它们检入到Subversion中。Maven能否将依赖关系拉入项目中?
这可以用Maven完成吗?应该这样做吗?
我正在与Eclipse,Spring,Java和Tomcat一起使用Subversion进行版本控制。我正在尝试第一次尝试使用Maven,但我已经看到的一件事情是我不喜欢的是,如果我使用maven启动项目,它会将所有依赖项下载到我的.m2
文件夹中,并将所有类路径下载到项目,但我们希望所有的依赖项都进入WEB-INF/lib
,所以我们可以将它们检入到Subversion中。Maven能否将依赖关系拉入项目中?
这可以用Maven完成吗?应该这样做吗?
将二进制包检入到你的源代码控制中并不是很理想,而且与maven相反。当这些在线存储库停机并且解决方案是使用像Artifactory之类的东西来托管自己的存储库时,会发生什么情况是一个有效的担忧。有些人不喜欢他们必须与源代码控制器一起维护另一个系统,但是值得它来获得maven带给桌面的所有功能。
源代码回购中的二进制文件是一个很大的错误,特别是当你开悟并转向像git或bzr这样的分布式SCM时,它会下载整个回购历史记录。 – artbristol 2012-03-30 16:11:07
我无法反驳更多。 Java依赖关系(JAR)不会经常更改,因此“下载整个历史记录”参数并不成立。 – 2012-03-30 16:17:33
但他们确实频繁更换,您决定不更新到新版本是另一回事。 – Hiro2k 2012-03-30 18:05:33
您可以借助Maven下载依赖关系(例如通过使用maven-dependeny-plugin),但大多数情况下您肯定不想这样做。
从Why not Store JARs in CVS?(或任何其他版本控制系统):
了解Maven最重要的一点是项目的依赖关系不应该检入版本控制(不取决于哪个版本控制)。 Maven的想法是只在一个地方有$ HOME/.m2/repository。这意味着对于您正在工作的每个项目,您的硬盘驱动器上只有一次依赖关系。依赖关系管理可以轻松地添加/更改/删除项目中的依赖关系。此外Maven的不仅手柄依赖它会支持你做单元/集成测试的创建报告像代码覆盖等等,还有更多。如果你真的想与Maven合作,你应该建立像Nexus,Artifactory或Archiva这样的Repository Manager。
最重要的一点是,如果您不喜欢Maven的工作方式,那么您的手指就会离开Maven,否则您将无法接受挑战。如果你喜欢使用maven,你必须接受Maven Way。
为什么您需要将依赖项提交到源代码库? – nobeh 2012-03-30 16:01:44
这样,您就可以立即从存储库中重建项目。让新雇员能够毫不费力地构建系统至关重要。 – Hiro2k 2012-03-30 16:06:55
我会提出一个不同的观点,即你想要做的事实际上是许多项目达到一定复杂度和/或团队规模的首选。我已经构建了许多Java应用程序,从命令行到桌面用户界面,到JEE和其他Web应用程序,并像您描述的那样手动管理依赖关系。我也参与了几个Maven驱动的项目。毫无疑问,我可以毫无疑问地明确指出,方法(包括直接在项目中的依赖关系)更容易建立和维护,IMO。对我而言,Maven是解决问题的一个很好的例子。 – 2012-03-30 16:15:32