【问题标题】:Building Java "on the go" [closed]“随时随地”构建 Java [关闭]
【发布时间】:2019-01-30 00:49:25
【问题描述】:

我通常使用的构建工具是 Make、Ninja 或 NPM 脚本。但是......我可以在 Java 中使用什么,我可以在我的项目上使用它以获得可靠的“只需构建并运行这个”方法,它可以在 Windows 和 macOS 上运行?我可以使用 shell 脚本 - 但这些脚本在 Windows 上不起作用,所以我必须为 Windows 做批处理文件just

另外,我知道我可以在这里使用 Make,但不幸的是,Java 不像 C++ 那样做“目标文件”——而且定义输出的去向也不是那么容易(对我来说)。

因此,拥有一个本机知道 javacjava 行为方式的构建工具将非常有用,尤其是因为我根本不知道它们的行为。

举个小例子,考虑一下这棵树:

.
├── [ 425]  oop11.iml
└── [  96]  src
    └── [  96]  de
        └── [  96]  uni_marburg
            └── [  96]  wise1819
                └── [ 160]  ue11
                    ├── [3.7K]  Card.java
                    ├── [1023]  Lambdas.java
                    └── [ 138]  Main.java

Lambdas.javaMain.java 都包含一个 public static void main 方法 - 所以我需要两个目标 - 一个是 Lambdas.java,一个是 Main.javaCard.java

我怎样才能做到这一点?有没有可以处理这个的构建工具?

【问题讨论】:

  • 通常我会建议Ant,但由于您似乎讨厌Java,您最好创建包含javacjava 命令的bash/bat 文件。
  • Java 不像 C++ 那样做“目标文件” - Java 有 .class 文件,它们大致相同。
  • @dave 那么javac Foo.java && javac Bar.java && javac Foo.class Bar.class 会起作用吗?我知道这个命令不完全正确,但我想你明白了它的要点......
  • @VGR 这并不是说我讨厌 Java——我只是完全不了解它,而且我知道我不擅长学习一门新语言——以及 Java 在模块化等方面的特定功能,它与 C++ 完全不同。我会给 Ant 一个机会,看看结果如何。 :)
  • 不完全。您使用javac.java 文件生成.class 文件。下一步通常是使用jar 命令将.class 文件打包到.jar 文件中。

标签: java build-system


【解决方案1】:

MavenGradle 是最常见的 Java 构建工具。 您只需要添加一个定义您的项目的文件(Maven 的 pom.xml)并按照 standard directory layout 获取您的源代码。例如:

.
├── pom.xml
└── src
   └── main
     └── java
        └── de
          └──  uni_marburg
            └──  wise1819
                └──  ue11
                    ├──  Card.java
                    ├──  Lambdas.java
                    └──  Main.java

您可以使用maven's exec plugin 在单个命令中执行。例如:

mvn exec:java -DmainClass=de.your-package.Lamdba

最后,为了让学生的设置更简单,您还可以使用maven wrapper,它提供了一系列脚本来安装所需的 Maven 版本。

【讨论】:

【解决方案2】:

Gradle、Ant 和 Maven 都有一个陡峭的学习曲线,特别是如果您不熟悉其中任何一个并且不习惯在 Java 生态系统中工作。我的意思是,很容易找到这些的“Hello World”教程,而且它们 - 当然 - 完全记录在手册中。但是,如果你想做的不仅仅是“Hello World”,“应该”简单的事情,那就是他们变得困难的时候(直到你成为专家,这需要时间)。

大多数能够通过回答这个问题来帮助您的 Java 专家在 Gradle、Ant、Maven 和其中一种 IDE 方面拥有多年经验 - 如此专业以至于他们忘记了早期的痛苦。

Gradle 或 Ant 的真正目的和功能是自动执行复杂项目的所有构建步骤。它们是为构建大型 Java 项目时需要做的所有事情量身定制的批处理或脚本处理器 - Gradle 更具体地用于构建步骤,Ant 更通用,但可以使用任何一个。例如,我将 Gradle 用于一个开源项目,我需要从两个不同的 Github 项目中获取最新的源代码,检查库是最新的,更新内部版本号,并构建两个不同的二进制文件作为“生产”版本和“开发”版本,并将它们打包到 .jar 文件中 - 每次代码更改时,我都会一遍又一遍地创建这样的构建。可能需要花费数小时的编码时间才能完全正确地设置 gradle 以自动化此类事情。

可能不值得使用 Gradle 或 Ant 来构建一个简单的项目。正如其他人所说,命令行编译器javac对于一个简单的项目来说已经足够了。

我能给出的最好建议是“咬紧牙关”。不厌其烦地正确学习基础知识。安装并使用其中一种 IDE(Eclipse 或 IntelliJ)。

然后您会发现创建新的 Java 项目既快速又简单。 IDE 适用于小型和大型项目。

黄金提示:安装 Maven 并从第一天开始使用它,使您的所有项目成为 Maven 项目。如果从教程或开源项目中复制别人的代码,请注意依赖关系及其版本,并将依赖关系复制到自己项目的Mavenpom.xml中。依赖项 = 库。


由于您的部分问题似乎是“我是否值得为这种我还不知道的语言学习这些工具”,所以我将列出 Java 的一些一般优点和缺点。

Java 的优点:

  • 完全相同的代码可在 Windows、Mac 或 Linux 上运行(好吧,如果您正在编写游戏代码,您可能需要添加原生库以实现直接访问声音或图形等一些功能,但这些库是现成的)
  • 优秀的图书馆
  • 优秀的 IDE,将在您构建之前检测语法错误和许多常见的编码错误
  • 强类型语言,因此某些常见类型的编码错误根本不可能发生
  • 易于人类理解的代码(取决于编码技能)
  • 高性能是可能的(取决于编码技能)
  • 执行速度快,几乎与 C++ 和 Go 等编译语言一样快(Java 编译为字节码,然后在内置优化器的运行时平台上解释字节码)
  • 项目及其可执行代码的整齐安装,与项目相关的所有内容都保留在一个文件夹路径中
  • IDE 可以将您的代码编辑热加载到运行代码中(这样您就可以编辑代码并立即在运行代码窗口中查看结果)
  • 可以扩展到非常大的项目
  • 无需担心垃圾收集,它是自动的
  • 您完成的应用可以作为单个二进制文件(.jar 文件)分发
  • 如果你学习 Java,你也获得了很多 Javascript 知识(完全不同的语言,但语法相同)
  • Android 应用是用 Java 的超集编写的
  • 不与某一特定供应商绑定(您不与​​ Microsoft 绑定)
  • 如果您不喜欢 Java 本身,还有其他语法不同的语言,这些语言本质上是 Java,例如 Scala 和 Groovy(就像 Visual Basic 和 C# 本质上是相同的语言一样)

Java 的缺点

  • 在 Java 中创建 GUI 是一项艰巨的工作,所有工具都有些糟糕
  • Java 中的字符串处理很好(有很多库方法),但在生产代码中速度慢且占用大量内存
  • 多线程得到了很好的支持,但在生产代码中使用了大量内存(每个线程都有自己的堆栈) - 可重用的线程池部分解决了这个问题
  • 有很多用于 Web 应用程序的 Java 库和平台,但它们都有点臃肿和沉重
  • 运行中型或大型应用程序在初始加载时需要 10 秒甚至更长的时间

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-30
    • 2015-03-16
    • 1970-01-01
    • 1970-01-01
    • 2012-04-08
    • 1970-01-01
    • 2021-01-19
    相关资源
    最近更新 更多