我正在教授第二学期的Java课程,我正在尝试建立一个简单的Maven项目,该项目可以在任何学生的环境中运行(Windows/Mac/Linux,IntelliJ/VS Code/Eclipse,任何版本的Java 8或更高版本(,而不会抱怨。因为这只是第二学期的编程课程,所以我希望pom.xml
尽可能简单。 该项目只需要几个 Java 源文件和几个测试文件。
当前pom.xml
如下。 它可以工作,但 MacOS 上的 Visual Studio Code with Java 8 会生成以下警告:
- 构建路径指定执行环境 J2SE-1.5。没有 工作区中安装的 JRE 严格兼容 这种环境。
- 指定的编译器合规性为 1.5,但 JRE 使用 1.8
我可以通过添加以下行来解决问题:
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
但是,这不会给使用不同 Java 版本的学生带来警告或错误吗?由于我们没有做任何花哨的事情,我不想要求他们都使用 Java 12 或 13。 任何版本 8 或更高版本都可以。
我也不愿告诉学生编辑上面的属性以匹配他们的机器,因为我认为如果我提取他们的代码并尝试在我的机器上运行它,这会导致问题。
有没有办法将Maven和IDE配置为对任何JDK版本8及更高版本感到满意?
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>gvsucis</groupId>
<artifactId>ArrayLab</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<name>ArrayLab</name>
<url>http://maven.apache.org</url>
<build>
<plugins>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.2</version>
</plugin>
<plugin>
<artifactId>maven-failsafe-plugin</artifactId>
<version>2.22.2</version>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.6.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.6.2</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
您需要区分 JDK 和您构建的 Java 版本。
设置maven.compiler.source
和maven.compiler.target
仅设置目标 Java 版本。如果将其设置为1.8
,则可以使用任何支持此功能的 JDK 进行构建,即 JDK 8 及更高版本。
请将您的 java 主页更改为使用jdk
而不是jre
。
如果您使用的是 JDK8+,那么您的 POM 配置应该可以工作。
通常,所有 IDE 都引用 JAVA_HOME 环境变量来查找java
二进制文件。因此,将您的JAVA_HOME
设置为jdk8+
.
如果是寡妇机器,则需要重新启动,否则只需运行source .bashrc
或source .bach_profile