【问题标题】:Can Maven pull the dependency into the project?Maven可以把依赖拉到项目中吗?
【发布时间】:2012-03-30 15:55:45
【问题描述】:

我正在处理一些使用 Subversion 进行版本控制的 Eclipse、Spring、Java 和 Tomcat 小项目。我希望第一次尝试使用 Maven,但我已经看到我不喜欢的一件事是,如果我使用 maven 启动一个项目,它会将所有依赖项下载到我的 .m2 文件夹和所有类路径中到项目,但我们希望将所有依赖项移至WEB-INF/lib,以便我们可以将它们检入Subversion。

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

【问题讨论】:

  • 为什么需要将依赖项提交到源代码库中?
  • 这样您就可以立即从存储库中重建您的项目。让新员工能够轻松构建系统至关重要。
  • 我将提供不同的意见,即对于具有一定复杂性和/或团队规模的许多项目,您尝试做的实际上是首选。我已经构建了许多 Java 应用程序,从命令行到桌面 UI,再到 JEE 和其他 Web 应用程序,并像您描述的那样手动管理依赖项。我还参与了几个 Maven 驱动的项目。我可以毫无疑问地说,显式方法(包括直接在项目中的依赖项)更容易设置和维护,IMO。对我来说,Maven 是寻找问题的解决方案的一个重要例子。
  • 对于基于 Maven Eclipse 插件的非常简单和轻量级的 Eclipse 依赖管理解决方案,请参阅我在 this thread 中的回答。

标签: java eclipse spring maven-3


【解决方案1】:

将二进制包签入源代码管理并不理想,并且与 maven 不符。一个有效的担忧是当这些在线存储库出现故障时会发生什么,解决方案是使用Artifactory 之类的东西托管您自己的存储库。有些人不喜欢他们必须在源代码控制的同时维护另一个系统,但获得 maven 带来的所有功能是值得的。

【讨论】:

  • 源代码库中的二进制文件是一个大错误,尤其是当您开悟并转向像 git 或 bzr 这样的分布式 SCM 时,它会下载整个代码库历史记录。
  • 我完全不同意。 Java 依赖项 (JAR) 不会经常更改,因此“下载整个历史记录”的说法站不住脚。
  • 但是它们确实经常变化,您决定不更新到较新的版本是另一回事。
  • “有些人不喜欢他们必须在源代码控制的同时维护另一个系统” - 总是可以使用 SaaS 产品 - 零维护。
【解决方案2】:

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

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

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

【讨论】:

    【解决方案3】:

    了解 Maven 最重要的一点是,项目的依赖项不应签入版本控制(不依赖于哪个版本控制)。 Maven 的想法是将依赖项仅放在一个位置 $HOME/.m2/repository 中。这意味着对于您正在工作的每个项目,您的硬盘驱动器上只有一次依赖项。依赖项管理使从项目中添加/更改/删除依赖项变得容易。此外,Maven 不仅会处理依赖关系,它还会支持您进行单元/集成测试,创建报告,如代码覆盖率 等等等等。如果你真的想使用 Maven,你应该设置一个 Repository Manager,比如 Nexus、Artifactory 或 Archiva。

    最重要的一点是,如果您不喜欢 Maven 的工作方式,这种方式会让您对 Maven 感到厌烦,否则您将失去挑战。如果你喜欢使用 maven,你必须接受 Maven Way

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-03-07
      • 1970-01-01
      • 1970-01-01
      • 2012-11-18
      • 1970-01-01
      • 2018-10-20
      • 1970-01-01
      相关资源
      最近更新 更多