为 Java 构建工具

Build tools for Java

我目前正在参加一些在线课程以更新我对 Java 和 Python 的了解。我也在练习在两台不同的机器上使用 Git 和 GitHub 来感受版本控制(这就是产生这个问题的原因)。

基本上,我的学校项目所依赖的一台机器上有一些 JAR 文件。完成该项目后,我将其推送到我的 GitHub 存储库,然后尝试在新计算机上克隆该存储库。

当我查看克隆的存储库时,我注意到 JAR 文件不存在。因此,经过大量挖掘,我发现我的 .gitignore 中忽略了所有 JAR 文件(我为 netbeans 下载了一个通用的 .gitignore 模板)。

我决定研究为什么您可能想要忽略 .JAR 文件。我没有找到答案,但我确实找到了关于如何添加 .JAR 文件的 。我已经弄清楚了那部分,但是回答者还说:

"Also I recommend you to use build manager as Maven, Gradle or Ant to add you dependencies."

所以我的问题:

1.) 使用第三方工具构建应用程序与将 .JAR 文件添加到 GitHub 存储库有什么关系?

2.) 默认忽略 JAR 文件的原因是什么?

3.) 新的计算机程序员应该关心使用这些工具之一吗? (我几乎不明白构建和编译之间的区别)。

git、svn 和 cvs 等版本控制工具用于版本代码,而不是二进制文件,特别是编译代码。

将 jar 添加到项目的源代码也会使该项目变得更大。

如果您确实想要 "save" 您的 jars 到某个地方,您可以使用存储库和依赖项管理工具,例如Maven Central、Ivy 或 Gradle.

编辑

您开发一个项目,即您编写代码并将其提交给 git。您使用 git 来处理不同版本的代码以及与其他开发人员的协作。您的代码可能具有依赖性,例如log4j 或其他。您可以使用 Maven / Ivy / Gradle 从 jar 存储库动态获取它们。这样,我可以快速克隆您的项目(源),然后从中央源获取依赖项。它避免了在 N 个不同项目中复制库。

根据定义,版本控制系统应该协助开发人员管理随着时间的推移对源代码所做的更改。您可以将其想象成一个跟踪所有更改的数据库。这允许多个开发人员同时处理同一个项目。

现在,由于我们喜欢重用代码而不是从头开始编写所有项目,因此项目通常依赖于其他项目,从而成为您项目的依赖项。但是,当您更改源代码时,库的开发人员也会更改。因此,您应该依赖特定版本的库,以防止拉取意外更改。这就是 Gradle 和 Maven 等构建工具发挥作用的地方。您只需声明项目的依赖项,同时引用该依赖项的特定版本。

以下示例来自 Maven:

<dependency>
    <groupId>javax</groupId>
    <artifactId>javaee-api</artifactId>
    <version>8.0</version>
</dependency>

这些工具可以很容易地跟踪您的依赖项和使用的版本。

但是你为什么不把你的库也提交到你的版本控制系统呢?

  • 库占用 space 并减慢操作速度。克隆存储库可能需要几分钟而不是几秒钟。
  • 每次增加您所依赖的版本时,您都必须上传新版本的库。
  • 一些构建依赖于系统。虽然对于 Java 程序来说并不那么重要,但您通常会为特定系统编译 C++ 程序。使用构建工具,您可以在本地获取源代码并在您的机器上构建正确的版本。

What does using a third party tool to build an application have to do with adding .JAR files to a GitHub repository?

您无需上传它们。

What is the reason for defaulting to ignoring JAR files?

以上原因应该会给你一个很好的提示。事实上,很多文件通常默认被忽略,看看模板集合here

Should a new computer programmer care about using one of these tools?

如果您开始在团队中工作,您可以手动合并您的代码,但您很快就会注意到这非常耗时且容易出错。尽早开始学习 VCS 从来都不是一个错误的想法,因为据我所知,这个主题通常不会在大学教授,但在以后的工作中是强制性的。