Mac(M1 Max)下Maven无法解析JavaFX 21.0.6依赖求助
Maven无法解析JavaFX依赖问题(Apple M1 Max环境)
关联Stack Overflow讨论原方案无效,重新提问。
环境信息
Mac环境
- MacBook Pro(Apple M1 Max芯片)
- macOS 15.2
Java环境
当前生效版本:
echo $JAVA_HOME /opt/homebrew/Cellar/openjdk@21/21.0.6/libexec/openjdk.jdk/Contents/Home
架构为aarch64:
file $(echo $JAVA_HOME)/bin/java /opt/homebrew/Cellar/openjdk@21/21.0.6/libexec/openjdk.jdk/Contents/Home/bin/java: Mach-O 64-bit executable arm64
Maven环境
which mvn /opt/homebrew/bin/mvn
mvn -version Apache Maven 3.9.9 (8e8579a9e76f7d015ee5ec7bfcdc97d260186937) Maven home: /opt/homebrew/Cellar/maven/3.9.9/libexec Java version: 21.0.6, vendor: Homebrew, runtime: /opt/homebrew/Cellar/openjdk@21/21.0.6/libexec/openjdk.jdk/Contents/Home Default locale: en_US, platform encoding: UTF-8 OS name: "mac os x", version: "15.2", arch: "aarch64", family: "mac"
pom.xml配置
<?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.drm.astro</groupId> <artifactId>picker</artifactId> <version>1.0-SNAPSHOT</version> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <javafx.platform>mac-aarch64</javafx.platform> </properties> <dependencies> <dependency> <groupId>org.openjfx</groupId> <artifactId>javafx</artifactId> <version>21.0.6</version> </dependency> <dependency> <groupId>org.openjfx</groupId> <artifactId>javafx-fxml</artifactId> <version>21.0.6</version> </dependency> <dependency> <groupId>org.controlsfx</groupId> <artifactId>controlsfx</artifactId> <version>11.2.1</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.11.0</version> <configuration> <source>21</source> <target>21</target> <annotationProcessorPaths> <path> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.30</version> </path> </annotationProcessorPaths> </configuration> </plugin> <plugin> <groupId>org.openjfx</groupId> <artifactId>javafx-maven-plugin</artifactId> <version>0.0.8</version> </plugin> </plugins> </build> </project>
报错信息
执行mvn install时出现:
[ERROR] dependency: org.openjfx:javafx:jar:21.0.6 (compile) [ERROR] Could not find artifact org.openjfx:javafx:jar:21.0.6 in central
已尝试操作
- 更换不同版本的
org.openjfx:javafx依赖 - 在pom中手动添加
<javafx.platform>mac-aarch64</javafx.platform>属性
解决方案
问题根源
org.openjfx:javafx是聚合类型依赖(pom),本身不是可直接引用的jar包,所以Maven无法在中央仓库找到对应的jar文件。你需要直接引入具体的JavaFX模块,并指定对应平台的分类器。
方案1:修改依赖为具体模块并指定分类器
把原来的javafx聚合依赖替换成实际需要的JavaFX模块(比如javafx-controls、javafx-graphics),同时添加平台分类器:
<dependencies> <!-- 替换原javafx聚合依赖为具体模块 --> <dependency> <groupId>org.openjfx</groupId> <artifactId>javafx-controls</artifactId> <version>21.0.6</version> <classifier>${javafx.platform}</classifier> </dependency> <dependency> <groupId>org.openjfx</groupId> <artifactId>javafx-graphics</artifactId> <version>21.0.6</version> <classifier>${javafx.platform}</classifier> </dependency> <!-- 保留原有的javafx-fxml依赖并添加分类器 --> <dependency> <groupId>org.openjfx</groupId> <artifactId>javafx-fxml</artifactId> <version>21.0.6</version> <classifier>${javafx.platform}</classifier> </dependency> <!-- 其他依赖不变 --> <dependency> <groupId>org.controlsfx</groupId> <artifactId>controlsfx</artifactId> <version>11.2.1</version> </dependency> </dependencies>
方案2:使用Maven Profile自动适配平台
如果需要跨平台构建,可以添加Profile让Maven自动根据当前系统选择分类器:
<profiles> <profile> <id>mac-aarch64</id> <activation> <os> <family>mac</family> <arch>aarch64</arch> </os> </activation> <properties> <javafx.classifier>mac-aarch64</javafx.classifier> </properties> </profile> <!-- 可添加其他平台Profile,比如mac-x86_64、win、linux等 --> </profiles>
然后在依赖中使用${javafx.classifier}作为分类器即可。
方案3:手动下载并引入本地jar
如果插件和依赖配置都无法解决,可直接下载aarch64版本的JavaFX压缩包,解压后将jar放入项目lib目录,再在pom中配置系统依赖:
<dependency> <groupId>org.openjfx</groupId> <artifactId>javafx-controls</artifactId> <version>21.0.6</version> <scope>system</scope> <systemPath>${project.basedir}/lib/javafx-controls-21.0.6-mac-aarch64.jar</systemPath> </dependency> <!-- 其他JavaFX模块同理配置 -->
内容的提问来源于stack exchange,提问作者David Maffitt
相关产品推荐
相关产品推荐

