我正在尝试测试模块间的交叉编译。我有一个使用java 1.8的模块,另一个模块使用Java 11,我试图使用Java 11模块作为对Java1.8项目的依赖。当我试图编译Java 11模块时,maven显示了一个错误。
主模块
<project>
<dependencies>
<dependency>
<groupId>com.berkin</groupId>
<artifactId>java</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
</project>名为JAVA的辅助模块
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.berkin</groupId>
<artifactId>java</artifactId>
<version>1.0-SNAPSHOT</version>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>11</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
</project>辅助模块代码
public class Test {
public void test(){
System.out.println(" ".isEmpty()); //true
}
}理论上,我应该能够用java 11编译器编译辅助模块,并在minJava8JRE中使用它。因此,我也可以在Java 8项目中使用它作为依赖项。我在哪里失踪了?
错误
Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project java: Fatal error compiling: invalid source release: 11 -> [Help 1]谢谢。
发布于 2020-03-03 19:00:59
主要原因是不能使用低于target值的target值。如果希望代码与Java1.8兼容,请将源代码降低到1.8
发布于 2020-03-03 19:59:34
谢谢@Elliott Frisch
有几个术语;
JAVA_HOME :它是由JAVA_HOME定义的,或者如果您通过为Maven选择另一个JAVA_HOME来覆盖它,就是这样。您可以用Java 11编译器编译Java 6代码。因为它有向后兼容性。
源:您希望使用Java特性的最低java版本。例如,如果我想使用lambdas,至少我必须使用源代码8。如果我想使用Java 11特性,我需要将它设置为11。是关于特性的所有内容。
目标:最小的JRE版本,可以运行我的特性。例如,如果我设置了Java 8,至少需要JRE 8来使用lambdas。我不能使用JRE 7或更低,因为他们不知道lambda是什么。
也是
如果java编译器版本为8,则无法编译源代码11类。因为编译器不知道如何编译Java 11。一开始我失败了,因为我的源代码比源代码低。当我更改为11 & 11时,我再次失败,因为这次编译器更老了(它是Java 8)。
谢谢
https://stackoverflow.com/questions/60513814
复制相似问题