我有使用 Java 17 实现的 java 项目 A。项目 A 依赖于使用 Java 21 实现的项目 B。由于其他依赖项,我无法将 A 升级到 Java 21。
如何使用带有 B 依赖项的 Maven (3.8.8) 安装项目 A?
我已经安装了带有 Maven 3.8.8 和 Java 21 的项目 B。当我在带有 Maven 3.8.8 和 Java 17 的项目 A 上运行
mvn clean install
时,它在项目 B 的 Java 版本上崩溃了。
如何让 Maven 知道,项目 A 使用 Java 17,但依赖项 B 使用 Java 21。
我为Maven设置java版本的方式是通过
$JAVA_HOME
。
这是项目A的.pom文件:
<?xml version="1.0" encoding="UTF-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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.mycompany</groupId>
<artifactId>ProjectA</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<java.version>17</java.version>
<exec.mainClass>ProjectA.main</exec.mainClass>
</properties>
<dependencies>
<!-- https://mvnrepository.com/artifact/org.apache.spark/spark-sql -->
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-sql_2.12</artifactId>
<version>3.2.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.spark/spark-core -->
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.12</artifactId>
<version>3.2.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<exclusions>
</exclusions>
<version>2.4.13</version>
</dependency>
<!--https://mvnrepository.com/artifact/org.mongodb/mongo-java-driver-->
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
<version>3.12.10</version>
</dependency>
<!--https://mvnrepository.com/artifact/org.mongodb.spark/mongo-spark-connector-->
<dependency>
<groupId>org.mongodb.spark</groupId>
<artifactId>mongo-spark-connector_2.12</artifactId>
<version>3.0.1</version>
<scope>compile</scope>
<type>jar</type>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>5.4.0</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>cz.matfyz</groupId>
<artifactId>ProjectB</artifactId>
<version>1.0-SNAPSHOT</version>
<!-- <scope>compile</scope> -->
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.2</version>
<configuration>
<archive>
<manifest>
<mainClass>ProjectA.main</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.4.13</version>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
<configuration>
<skip>false</skip>
</configuration>
</plugin>
</plugins>
</build>
</project>
通过互联网搜索,我发现类似的问题可以通过工具链解决。但是,只有当我想用不同的 java 版本编译项目 A 的不同部分时,这才能解决问题。我的情况有所不同 - 我希望 Maven 能够安装项目 A 并依赖于具有更高版本 Java 的项目 B。
谢谢您的建议
不可能。
如果您的依赖项需要 Java 21,那么您需要 Java 21。