Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用-source和-targetjavac选项编译_Java_Maven_Compiler Construction - Fatal编程技术网

使用-source和-targetjavac选项编译

使用-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.

我已经将我的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.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