当前位置: 首页 > 面试题库 >

为什么没有人使用make for Java?

杜俊爽
2023-03-14
问题内容

我见过的几乎每个Java项目都使用Maven或Ant。它们是很好的工具,我认为几乎任何项目都可以使用它们。但是,什么都发生在使?它用于各种非Java项目,并且可以轻松处理Java。当然,如果使用Windows,则必须下载make.exe,但JDK并不随附Ant和Maven。

与Java一起使用时,make是否存在一些基本缺陷?仅仅是因为Ant和Maven是用Java编写的吗?


问题答案:

Make和Java的基本问题是,Make的工作前提是您先指定了一个依赖项,然后指定了解决该依赖项的规则。

对于基本的C,通常“将main.c文件转换为main.o文件”,请运行“ cc main.c”。

您可以使用Java来做到这一点,但很快就会学到一些东西。

通常,javac编译器启动缓慢。

和…之间的不同:

javac Main.java
javac This.java
javac That.java
javac Other.java

javac Main.java This.java That.java Other.java

是白天和黑夜。

数百种课程加剧了这一点,并且变得站不住脚。

然后,您将其与以下事实相结合:java倾向于以目录中的文件组的形式进行组织,而C和其他趋于更扁平化的文件则更是如此。Make对使用文件层次结构没有太多直接支持。

在收集级别,Make也不很擅长确定哪些文件已过期。

使用Ant,它将检查并汇总所有过时的文件,然后一次性编译它们。Make将仅在每个文件上调用java编译器。使make不执行此操作需要足够的外部工具才能真正表明Make不能完全胜任该任务。

这就是为什么诸如Ant和Maven之类的替代产品兴起的原因。



 类似资料:
  • 问题内容: 我试图了解使用以下命令创建列表的新实例之间的区别: 和 据我了解,稍后将返回一个不可变的列表。这意味着无法添加,删除或修改它。我想知道为什么会创建一个不可变的emptyList?有什么用?谢谢 问题答案: 假设您必须返回一个集合,并且您不想每次都创建几个对象。 返回空集合通常比返回更可取

  • 问题内容: 我很好奇,为什么是方法的公开? 此方法从调用它的位置替换原始堆栈跟踪,从而删除了定位异常所需的信息。它可以用于混淆,但无需付出太多努力,因为新的堆栈跟踪将直接指向混淆代码。更好的方法是简单地隐藏异常或抛出新异常。 但是我找不到在现存的上调用此方法的 合理 理由。所以问题是:为什么这种方法是公开的?后面有什么意义吗? 问题答案: 原因之一是性能。抛出和捕获异常很便宜;昂贵的部分是填充堆栈

  • 问题内容: 我正在尝试做这样的事情: 不幸的是,即使在Java 9中也不存在。 为什么它被遗漏了? 建议的解决方法是什么? 问题答案: 为什么它被遗漏了? 该API提供了可重用的构建块。这里的相关积木是,,。通过这些,您可以实现所需的功能:将流内映射到对象,然后获得平面图。提供构建基块的排列是不切实际的,并且很难扩展。 建议的解决方法是什么? 如前所述,使用可用的构建基块(+ ):

  • 许多编译器都提供128位整数类型,但我使用过的编译器都没有提供typedefs。为什么? 据我回忆,标准 用于此目的的储量 鼓励提供此类类型的实现提供typedef 要求此类实现提供至少128位的intmax_t (而且,我不相信我使用了实际上符合最后一点的实现)

  • 我正在尝试更新名为的数据库中名为的表。该表的主键是。 当我运行以下语句时: 我收到一个错误,上面写着“您正在使用安全更新模式,并且您试图更新一个没有使用键列的WHERE的表。” 我在谷歌上搜索了那个错误消息,大多数回复都是“你必须使用子句或关闭安全模式”。但正如您所看到的,我使用的是子句。如果我有子句,为什么会出现错误? MySQL服务器版本5.6。20

  • 我正在与Kotlin研究地图,并决定运行以下代码: 这让我: 我以为的冲突导致了一个列表。然后当我尝试这是静态编程语言的时,我也没有得到任何冲突。 问题: 我在这个简单的碰撞示例中错过了什么? 每个实现最常见的冲突行为是什么?