2012-07-19 80 views
4

能否请你告诉我,是强制要求在我的POM指定下Maven的编译器插件的详细信息:Maven的编译器插件2.0.2

<plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <configuration> 
      <source>1.5</source> 
      <target>1.5</target> 
      </configuration> 

如果是这样,为什么,我明白它做什么,但不知道为什么它的要求?没有任何其他方式来调用maven中的javac?

+0

问题标题指示'2.0.2' - 这是您想要使用还是正在使用的版本?你在哪个版本的maven中? – Raghuram 2012-07-19 10:44:03

+1

maven版本是2.1.0,它的标题编译插件 – hakish 2012-07-19 11:23:40

+1

答案如下。你应该看看使用更新版本的maven,以支持更新版本的编译器插件 – Raghuram 2012-07-19 11:41:47

回答

7

你能告诉我被强制指定Maven的编译器插件的详细信息?

不会,但它会使用Java 1.3或石器时代的东西来编译。

如果是这样,我明白它的作用,但不知道为什么它需要?

答案是'不'。但这是原因。你当然不想在你的新代码上使用Java 1.3进行编译。您需要Java 5中的所有新功能。不是吗? :)所以,你必须在已经混乱的POM中加入这些额外的行。

没有任何其他方式来调用maven中的javac?

没有。但是,即使您没有此块,mvn compile或任何其他命令也会起作用。但是如果你的源代码在Java 5中有任何先进的东西,但在以前的版本中没有,编译将失败。


编辑1

它是如何编译为1.3时,我有JDK 5?

那么,有一个选项可以在Java编译器中设置。请参阅此处的Java编译器选项:http://docs.oracle.com/javase/1.5.0/docs/tooldocs/windows/javac.html

它说您可以将source等设置为旧版本。

+1

如果编译器插件没有明确定义,maven'3.0.4'使用'1.5'作为源版本。 – Raghuram 2012-07-19 10:42:40

+0

@Raghuram是的,我想这是Maven社区的一个长期待决和非常期望的请求。不幸的是,当Java 6计算日期时,他们默认情况下会提供此功能。 :)人们现在希望在新项目上使用Java 6。 :) – Nishant 2012-07-19 11:21:36

+1

是的,你发现,代码编译与JDK 1.3,即使我有我的JAVA_HOME指向1.6。但不知道它为什么这样做? – hakish 2012-07-19 11:22:50

4

maven-compiler-plugin部分是可选的。如果您不在pom.xml中包含该部分,则应用默认值。

默认编译器是javac,用于编译Java源代码。 另请注意,目前默认的源设置为1.5,而 的默认目标设置为1.5,与运行Maven 时的JDK无关。

我个人的偏好是为了下面的原因有一个明确的配置。

  1. 我不认为依赖于外部的默认是个好主意,因为 这些可能变化时,插件的版本改变。
  2. 这是不可能的,我想成为编制了项目 的Java 1.5
+3

默认情况下,Mine正在编译版本1.3。 – Crowie 2014-02-25 14:15:14

相关问题