maven在pom.xml中忽略sourcelevel

时间:2017-08-07 16:07:18

标签: java maven maven-compiler-plugin

好的,我很确定我在这里错过了一个基本点,但我很难过。我正在和maven一起玩,以获得主要和测试来源在不同级别(1.7和1.8)进行编译 - 发现了很多帖子但是还没有让它工作,所以回到基础有空项目

首先,我希望通过将maven-compiler-plugin设置为源级别1.7并使用1.8代码(流)来让maven 编译我的代码。

这是我的测试代码

public static void main(String[] args) {
    new ArrayList<>().stream();
}

这是我的 pom.xml

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.6.2</version>
            <configuration>
                <source>1.7</source>
                <target>1.7</target>
            </configuration>
        </plugin>
    </plugins>
</build>

IntellIJ没有任何内容,并且在我更改之前会按预期投诉源级别。现在,为什么从命令行运行maven时...

$ mvn compile

$ mvn install

Maven不会抱怨?

maven版本3.5.0
java版本1.8.0_131

1 个答案:

答案 0 :(得分:1)

语法中没有任何内容在Java 7中无效。但是,stream()方法仅在 JDK 中引入.8。此代码编译因为您碰巧使用的是JDK 8.如果切换到较旧的JDK,您的代码将会中断。

防止此类潜在错误的一种方法是使用Animal Sniffer Maven Plugin,它允许您检查您是否使用了过于新的JDK部分,即使在针对上述新JDK进行编译时也是如此: p>

<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>animal-sniffer-maven-plugin</artifactId>
  <version>1.15</version>
  <configuration>
    <signature>
      <groupId>org.codehaus.mojo.signature</groupId>
      <artifactId>java17</artifactId>
      <version>1.0</version>
    </signature>
  </configuration>
  <executions>
    <execution>
      <id>animal-sniffer</id>
      <phase>compile</phase>
      <goals>
        <goal>check</goal>
      </goals>
    </execution>
  </executions>
</plugin>