Java 项目很少使用 make 和 makefile。事实上,我只在实践中见过这种用法,那是 13 年前,早于 Java 构建工具。相反,Java 项目使用两种领先的构建工具之一。
根据您的问题,我将假设您没有特别的理由使用 make(因为您不是在尝试编译只有 Makefile 的现有项目)。
蚂蚁
Ant 是一个基于 XML 的脚本构建工具,在概念上与 makefile 有一点(但不是很多)相似之处。 Ant 构建脚本将定义许多任务。这些任务将取决于其他任务。这些任务可以包括编译 Java 源文件、构建 jar 以及任何你真正喜欢的东西。
Ant 非常灵活,但您最终会一遍又一遍地(在项目之间)编写一堆样板。没有两个中等复杂的 Ant 项目是相同的,依赖关系可能会成为一个大问题。通过“依赖项”,我不是在谈论源依赖项,而是对第三方库的依赖项。 Ant 有另一个名为 Ivy 的工具用于管理依赖关系。
Maven
Maven 是另一个常见的构建工具。 Maven 与 Ant 的巨大区别在于 Maven 定义了项目类型(原型),例如 Web 应用程序。当您为项目选择一个(或多个)原型时,它要求一个非常深的目录结构。例如:
project-name
+- src/
+- main/
+- java/
+- com/example/project-name/
+- Java source files
+- test/
+- tends to mirror above
+- target/
+- classes/
+- com/example/project-name/
+- Java class files
+- test-classes/
+- tends to mirror above
...etc...
现在有些人不喜欢这样,部分原因是有些人只是不喜欢被告知要做什么(恕我直言),但也有一些遗留问题和其他因素。我个人认为这是一件好事,因为一旦您熟悉了任何 Maven Web 应用程序项目,您就可以转到任何其他 Maven Web 应用程序项目并找到自己的方法。
Maven 还会为您提供许多标准命令来运行,例如编译、测试、安装等。
Maven 对第三方库的依赖也很有用。您在您的 Maven 项目文件中声明它们,它们会从 Internet 上的存储库中检索(并在本地缓存,除非您另外设置)。
所以我的建议是使用这两者之一。如果您来自 C/C++ 背景,您可能习惯于 Makefiles,但这并不是真正的 Java 方式。就像我说的,您可能有理由在 Java 中使用 make,例如现有项目,但对于任何新项目,您绝对应该使用 Ant 或 Maven,在我看来。