为什么Maven的编译器默认为1.5版?

时间:2016-05-18 16:22:00

标签: java maven

正如Maven的documentation所述,

  

目前默认的源设置为1.5,默认目标设置为1.5,与您运行Maven的JDK无关。

我知道我可以为单个项目更改此项,但我不明白为什么选择忽略JDK。当然,检测版本并将其用于源设置会更直观吗?

3 个答案:

答案 0 :(得分:3)

为了简化配置,他们选择了合理的默认设置。这允许任何想要使用该默认设置的项目不包含该配置。他们选择了他们认为最常见的价值并将其作为默认值。

现在,多年过去了。几乎没有人想再使用该默认值。现在我们都必须明确设置值。

为什么不默认使用JDK版本?因为然后升级JDK可能会破坏现有项目。

为什么不将默认值更改为大多数当前项目使用的值?因为这可能会破坏任何使用默认项目的现有项目。

答案 1 :(得分:2)

这里有几点需要考虑。

短语"目前"建议将来可以改进或增强选择默认值的逻辑。但我不会屏住呼吸。

选择(或更糟糕的是,改变)默认值总是一件棘手的事情,正是Rob指出的原因。你是否安抚抱怨者并给其他人带来很多麻烦?或者你是否让睡觉的狗撒谎并保持过时的默认值?这两种选择都不理想,所以"什么都不做"胜出 - 两个邪恶中较小的一个。做出改变的风险大于收益。

khmarbaise可能意味着Maven的默认值与您使用的JDK之间没有任何关系。无论是正确的还是不正确的,在任何一种情况下,Maven都无法做到这一点。对于所有Maven都知道,您的计算机上可能有五种不同的JDK。它无法知道您正在使用哪些项目以及哪些项目。

将默认值更新为1.8,并且您可能拥有与更改默认值之前不能使用默认值的人一样多的人。 (假设合理的假设会少一些,但它仍然是一个假设。)无论默认值是什么,某人都必须使用自定义设置。那么为什么要担心哪一群人在哪?默认是关于方便;仅此而已。

目标是提供一致的行为。更改默认值(无论是否经常)都违背了该目标。知道Maven提供这种一致性可能值得持续投诉,因为他们不愿意添加几行XML来定制他们的项目的JDK级别。

答案 2 :(得分:0)

1.5版本中引入了Java注释和泛型。将级别设置得更低会破坏已编写的Java代码的很大一部分。虽然版本1.6和1.7中引入了一些功能,但它们并没有像泛型和注释那样广泛使用。但是,有许多J2EE工件需要1.6。大量代码使用1.5,因此被视为合理的默认值。