使用-source和-targetjavac选项编译
我已经将我的web应用程序升级到Java 7,Java_HOME指向1.7。我的Maven插件正在从Java_主页读取Java版本。但在pom.xml中看到以下设置后,我有点困惑:使用-source和-targetjavac选项编译,java,maven,compiler-construction,Java,Maven,Compiler Construction,我已经将我的web应用程序升级到Java 7,Java_HOME指向1.7。我的Maven插件正在从Java_主页读取Java版本。但在pom.xml中看到以下设置后,我有点困惑: <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>2.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<fork>true</fork>
<compilerVersion>1.6</compilerVersion>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
org.apache.maven.plugins
,以上设置将获得优先权,项目将使用1.6而不是1.7进行编译。对吗
如果我给出如下设置,如果我有特定于JDK1.7的代码,我的代码现在会编译吗
<source>1.6</source>
<target>1.7</target>
1.6
1.7
我不确定;上述设置实际上意味着什么?是的,这将把您的代码编译成Java 1.6代码(也将在Java 7环境中运行)。使用您的设置,源代码将被解释为符合Java 1.6,生成的类将针对1.6 JVM。JDK1.7可以处理这个问题。但是,如果您的代码是1.7,并且只希望以1.7为目标,那么您应该在这两个版本中都编写1.7。请注意,如果您的源代码包含仅在1.7中可用的功能,例如菱形运算符,那么您将得到编译错误
使用设置
<source>1.6</source>
<target>1.7</target>
而下面的代码可以很好地编译
List<String> l = new ArrayList<String>();
因此,如果您想使用1.7的源代码特性(菱形运算符、使用参考资料进行尝试等),那么必须在pom.xml中包含以下内容
<source>1.7</source>
<target>1.7</target>
1.7
1.7
不带插件的编译器配置
1.7
1.7
javac-help
javac-help
-源提供与指定版本的源兼容性
-目标生成特定VM版本的类文件
文档
source
指定接受的源代码版本。允许以下释放值:
- 1.6 Java SE 6中未引入任何语言更改。但是,源文件中的编码错误现在报告为错误,而不是像Java SE的早期版本那样报告为警告
- 6是1.6的同义词
- 1.7这是默认值。编译器接受带有JavaSE7中引入的特性的代码
- 7是1.7的同义词
target
生成以指定版本的VM为目标的类文件。类文件将在指定的目标和更高版本上运行,但不会在VM的早期版本上运行。有效目标为1.1、1.2、1.3、1.4、1.5(也包括5)、1.6(也包括6)和1.7(也包括7)。
-target的默认值取决于-source的值:
兼容性
请查看我的更新,并告诉我您的看法this@MSach请检查我的编辑。我的代码现在可以编译吗?-是的,但仅适用于JDK1.7
List<String> l = new ArrayList<String>();
<source>1.7</source>
<target>1.6</target>
List<String> l = new ArrayList<>();
source release 1.7 requires target release 1.7
<source>1.7</source>
<target>1.7</target>
<properties>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
</properties>
javac -help
-source <release> Provide source compatibility with specified release
-target <release> Generate class files for specific VM version