【问题标题】:Which version of Make to use for Java?哪个版本的 Make 用于 Java?
【发布时间】:2011-03-20 15:56:41
【问题描述】:

我有 make (Windows SDK)、nmake (Visual Studio) 和 make (CodeGear)

我使用哪个版本的 make 来编译 Java 应用程序? 我从哪里得到这个“制造”? 我下载了JDK,没有make。 我四处寻找可以编译 Java makefile 的东西。

如果你有一个 MAKEFILE 和一些 *.java 文件,你会使用什么?

【问题讨论】:

  • 你想要一个可执行的 JAR 吗?
  • 你能告诉我们你要编译什么程序吗?
  • “编译 Java 生成文件”是什么意思?
  • 我正在尝试更新 SourceForge 上的开源包。它只有 MAKEFILE,不知道该怎么做

标签: java makefile


【解决方案1】:

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,在我看来。

【讨论】:

  • 如果您尝试编译的项目带有 Makefile,您可以这样做。
  • @Rafe - 我不明白你是如何推断的。但无论如何,他需要一个特殊的编译器来做这件事……而不是一个特殊的构建工具。
  • @Stephen:无论如何,这是一种选择。不,您可以通过 JDK 完成所有操作。
  • 对不起?您无法说服 Sun 编译器生成本机代码。您需要一个不同的(非 OpenJDK)编译器。编译器可能在 Sun JDK 中运行这一事实并不重要。
  • @Stephen C:我认为 Rafe 正在考虑可执行 Jar,它根本不是可执行文件。
【解决方案2】:

使用处理您的 makefile 的任何版本。 Make 不做任何编译,它只是一个以构建软件为目的而设计的脚本系统。它只是委托给 javac 或其他东西来编译你的 Java 文件。

我会在你的系统上尝试所有三个。

【讨论】:

  • 不起作用。 CodeGear 使阻塞,NMake 抱怨语法无效,Windows 抱怨 / 和 \ 路径问题 :(
【解决方案3】:

有两个答案。

A1:如果您想使用 MAKEFILE,您需要查看软件随附的构建文档以了解要使用哪个版本的 make。如果没有与您的平台相关的构建文档,请查看最初实现该软件的平台的文档。多年来,Make 出现了许多不同的版本,每个版本都有自己的怪癖。

您在使用 MAKEFILE 时可能遇到的另一个问题是 makefile 不可移植。运行的规则中通常存在各种平台依赖关系;例如命令名称、命令路径等。如果您尝试在不同的平台上构建,这些问题可能需要您破解 MAKEFILE。 (顺便说一句:在 C / C++ 世界中,有一套称为 automake / autoconf 的 GNU 工具的迷宫,旨在解决这个问题。但听起来,你只有一个普通的 makefile。)

总而言之,如果您想坚持使用 make,请按照构建文档的说明进行操作,在没有任何相关构建文档的情况下,只需尝试任何版本的 make 看看会发生什么。如果存在与平台相关的问题,请准备好学习“make-ese”和破解 makefile。

A2:IMO,一个更好的替代方案是放弃现有的 MAKEFILE 并使用 Ant 或 Maven 创建您自己的构建文件。

【讨论】:

    【解决方案4】:

    如果您想要一个可执行的 JAR,请不要使用 makefile,只需按照以下命令提示进行操作:

    javac DiveLog.java
    jar cvfm yourjarname.jar manifest allyourcompiledclasses.class
    

    要从控制台运行 jar,请键入:

    java -jar yourjarname.jar
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-30
      • 2017-07-14
      • 1970-01-01
      • 1970-01-01
      • 2012-02-17
      • 2015-12-04
      • 2018-09-22
      相关资源
      最近更新 更多