【问题标题】:How do you build the directory structure of a self-contained java program from scratch?如何从头开始构建一个自包含的 java 程序的目录结构?
【发布时间】:2019-10-12 13:52:25
【问题描述】:

我正在用 Java 编写我的第一个 2D 游戏。我正在用 Atom 编写代码。我从 Mac 上的终端编译并运行代码。游戏到目前为止运行良好!但我担心我的项目结构不正确,到时候将无法部署它。我想知道为诸如基于 Java 的 2D 游戏之类的项目构建目录结构的正确方法,最好是从头开始。

我搁置了游戏制作以弄清楚结构。 我尝试使用 LibGDX 作为打包项目的一种方式,然后将其作为 Gradle 项目导入 Eclipse。我突然发现自己在我曾经简单的项目周围有一个巨大而不清楚的目录结构。我觉得这项任务并不比自己从头开始构建项目更简单。此外,我无法从 LibGDX 提供的这个自动生成的目录结构中运行任何简单的 java 代码,现在在 Eclipse 中。我宁愿在 Atom 中编写所有代码,并从终端编译和测试代码,必要时再次从终端创建适当的 JAR。

我决定简化手头的任务并返回到 Oracle 文档,并且我确定我正在尝试构建的是一个自包含的 Java 应用程序。甜的!但是 Oracle 文档似乎并没有深入探讨此类项目所需的必要目录结构背后的逻辑。他们告诉您您需要的两个主要组件是应用程序的资源(即 .java 文件、图像和音频等)和 JRE 的副本,以便用户在执行时拥有玩游戏所需的一切该程序。我只是对如何使用提供的信息设置此目录结构没有信心。

我想克服这个“这一切应该如何构建?”问题,所以我可以返回开发游戏。提前感谢您阅读并提供反馈。

【问题讨论】:

    标签: java game-development self-contained


    【解决方案1】:

    构建 Java 项目的行业标准是使用 Maven 或 Gradle 等工具。这两个工具都会自动处理所有源代码、资源文件等的处理,并拥有可以轻松导出 jar 文件(从 IDE 或命令行)的系统。从本质上讲,它们允许您为 Java 项目的构建方式指定任何您想要的内容(Gradle 也可以执行 C++ 项目),然后它们提供了一个抽象的命令行界面来构建项目。

    请务必注意,许多开发人员并不认同您在不使用 IDE 的情况下使用 Java 的偏好。虽然这本身不是问题,但当您想与将使用 IDE 的其他人一起工作时,它就会成为问题。 Gradle 和 Maven 都使这变得容易,因为几乎所有 IDE 都可以很好地与 Gradle 和 Maven 项目配合使用。出于这个原因,大多数 FOSS Java 项目都使用其中一种系统(通常是 Gradle)来允许不同的开发人员使用他们喜欢的 IDE。

    您还表示希望完全了解构成您的项目的文件集。为此,Gradle 可能是您最好的选择,因为它的教程很好地解释了这一点。它比普通的 Java 项目更复杂,但对于大多数开发人员来说是值得的,因为您可以获得非常简单和富有表现力的工具(例如,3 行 Gradle 配置可以创建 jar 导出)以及使用许多开发堆栈的能力(例如 IDE、命令行和持续集成)以较小的学习曲线为代价。 Gradle 也是当前最流行的不依赖 IDE 的 Java 构建工具。 Maven 的行为有点像一个黑匣子,但仍然具有 Gradle 的许多优点。如果您想学习 Gradle,他们的 getting started guides 是一个很好的起点。

    【讨论】:

    • 谢谢 john01dav。我能够按照您建议的 Gradle 入门指南中提供的步骤进行操作,并且能够使用 Gradle 命令构建目录结构并运行一个简单的“Hello World Program”Java 程序。这绝对为我指明了正确的方向。
    • 我能否根据自包含的 java 应用程序模型的要求将 JRE 的副本存储在 build.gradle 文件的存储库中?我假设 JRE 将被视为依赖项,并且我需要的存储库类型将是平面目录存储库,因此它将存储在我的根应用程序文件夹中的某个位置,可供用户启动我的游戏时使用。似乎 Gradle 将有助于构建我的程序,但 Oracle 使用 Ant 任务来执行 JRE 的导入。我认为 Gradle 也可以在这里完成。
    • @markgetrost 我主要是一名 C++ 程序员,所以我不了解 Gradle 的所有细节,但可能让 Gradle 输出一个包含 JRE 和应用程序 jar 的 zip .我会查看这些教程或提出另一个问题以获取有关如何执行此操作的更多详细信息。一般来说,最好在构建应用程序时让构建系统导入所有依赖项(包括 JRE),而不是将它们包含在应用程序的存储库或 gradle 项目中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多