构建 Java "on the go"



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

此外,我知道我可以在这里使用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

我怎样才能做到这一点?有没有一个构建工具可以使用它?

Maven或Gradle是最常见的Java构建工具。您只需要添加一个定义项目的文件(pom.xml for Maven),并遵循源代码的标准目录布局。例如:

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

您可以使用maven的exec插件在单个命令中执行。例如:

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

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

Gradle、Ant和Maven都有一个陡峭的学习曲线,尤其是如果你不熟悉它们中的任何一个,也不习惯在Java生态系统中工作。我的意思是,很容易找到"Hello World"教程,当然,它们在手册中有完整的文档。但是,如果你想做的不仅仅是"你好世界",而是"应该"简单的事情,那就是它们变得困难的时候(直到你成为专家,这需要时间)。

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

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

使用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中的字符串处理很好(有很多库方法),但在生产代码中速度慢且内存大
  • 多线程技术得到了很好的支持,但在生产代码中使用了大量内存(每个线程都有自己的堆栈)-可重用的ThreadPools部分解决了这个问题
  • 有很多用于web应用程序的Java库和平台,但它们都有点臃肿和沉重
  • 运行一个中型或大型应用程序需要10秒甚至更长的初始加载时间

相关内容

最新更新