我通常使用的构建工具是Make、Ninja或NPM脚本。但是我可以在Java中使用什么?我可以在我的项目中使用Java,以获得一个可靠的"只需构建并运行这个"方法,该方法可以在Windows和macOS上运行?我可以使用shell脚本,但这些脚本在Windows上不起作用,所以我必须为Windows做批处理文件。
此外,我知道我可以在这里使用Make,但不幸的是,Java不像C++那样做"对象文件",定义输出的位置也不那么容易(对我来说)。
因此,拥有一个本机了解javac
和java
行为的构建工具将非常有用,尤其是因为我根本不知道它们的行为。
举个小例子,考虑一下这个树:
.
├── [ 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.java
和Main.java
都包含一个public static void main
方法——所以我需要两个目标——一个做Lambdas.java
,一个做Main.java
和Card.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秒甚至更长的初始加载时间