Maven 忽略 pom.xml 中的 sourcelevel
maven ignores sourcelevel in pom.xml
好吧,我很确定我在这里遗漏了一个基本点,但我很困惑。我正在使用 Maven 来获取主要和测试源代码以在不同级别(1.7 和 1.8)进行编译 - 找到了很多帖子但还没有让它工作,所以回到一个空项目的基础。
所以首先,我想尝试通过将 maven-compiler-plugin 设置为源代码级别 1.7 并使用 1.8 代码(流),让 maven not 编译我的代码。
这是我的测试代码:
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
语法中没有任何内容在Java7中不起作用。但是,stream()
方法仅在[=17=中引入]JDK 8. 这段代码可以编译,因为你碰巧使用的是 JDK 8. 如果你切换到旧的 JDK,你的代码将被破坏。
防止此类潜在错误的一种方法是使用 Animal Sniffer Maven Plugin,它允许您检查您是否没有使用太新的 JDK 部分,即使在针对前面提到的新 JDK:
<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>
好吧,我很确定我在这里遗漏了一个基本点,但我很困惑。我正在使用 Maven 来获取主要和测试源代码以在不同级别(1.7 和 1.8)进行编译 - 找到了很多帖子但还没有让它工作,所以回到一个空项目的基础。
所以首先,我想尝试通过将 maven-compiler-plugin 设置为源代码级别 1.7 并使用 1.8 代码(流),让 maven not 编译我的代码。
这是我的测试代码:
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
语法中没有任何内容在Java7中不起作用。但是,stream()
方法仅在[=17=中引入]JDK 8. 这段代码可以编译,因为你碰巧使用的是 JDK 8. 如果你切换到旧的 JDK,你的代码将被破坏。
防止此类潜在错误的一种方法是使用 Animal Sniffer Maven Plugin,它允许您检查您是否没有使用太新的 JDK 部分,即使在针对前面提到的新 JDK:
<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>