好的,我很确定我在这里错过了一个基本点,但我很难过。我正在和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
答案 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>