无法在VSCode的JavaFX项目中集成Apache Commons VFS2库
解决VSCode中JavaFX Maven项目集成Apache Commons VFS2的模块访问问题
问题复现步骤
- 在VSCode中创建JavaFX Maven项目:按Ctrl+Shift+P打开命令面板,选择
Java: Create Java Project...->JavaFx create from archetype,设置groupId为com.example,artifactId为demofx,选择本地文件夹,版本默认1.0 SNAPSHOT,确认后打开项目。 - 在
pom.xml中添加Apache Commons VFS2依赖:
<!-- Apache Commons VFS2 依赖 --> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-vfs2</artifactId> <version>2.9.0</version> </dependency>
- 重建项目后,在Java类中导入
org.apache.commons.vfs2.FileObject和org.apache.commons.vfs2.FileSystemOptions时,出现错误:
The type org.apache.commons.vfs2.FileSystemOptions is not accessible Java(16778666)
- 尝试在
module-info.java中添加requires org.apache.commons;后,又出现模块无法解析的错误:
org.apache.commons cannot be resolved to a module Java(8389908)
项目配置文件
pom.xml:
<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>com.example</groupId> <artifactId>demofx</artifactId> <version>1.0-SNAPSHOT</version> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>11</maven.compiler.source> <maven.compiler.target>11</maven.compiler.target> </properties> <dependencies> <dependency> <groupId>org.openjfx</groupId> <artifactId>javafx-controls</artifactId> <version>13</version> </dependency> <dependency> <groupId>org.openjfx</groupId> <artifactId>javafx-fxml</artifactId> <version>13</version> </dependency> <!-- Apache Commons VFS2 依赖 --> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-vfs2</artifactId> <version>2.9.0</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.0</version> <configuration> <release>11</release> </configuration> </plugin> <plugin> <groupId>org.openjfx</groupId> <artifactId>javafx-maven-plugin</artifactId> <version>0.0.6</version> <executions> <execution> <!-- Default configuration for running --> <!-- Usage: mvn clean javafx:run --> <id>default-cli</id> <configuration> <mainClass>com.example.App</mainClass> </configuration> </execution> </executions> </plugin> </plugins> </build> </project>
原module-info.java:
module com.example { requires javafx.controls; requires javafx.fxml; requires org.apache.commons; opens com.example to javafx.fxml; exports com.example; }
问题原因
Apache Commons VFS2 2.9.0属于自动模块(未包含module-info.class),Java会根据JAR文件名自动推导模块名。该库的JAR文件名为commons-vfs2-2.9.0.jar,因此自动模块名是org.apache.commons.vfs2,而非之前写的org.apache.commons。同时JavaFX项目是模块化项目,必须在module-info.java中正确声明依赖模块,否则无法访问库中的类。
解决方案
- 修正module-info.java的依赖声明
将错误的模块依赖替换为正确的名称:
module com.example { requires javafx.controls; requires javafx.fxml; requires org.apache.commons.vfs2; opens com.example to javafx.fxml; exports com.example; }
- 清理并重建项目
执行Maven命令清理缓存并重新构建:
mvn clean install
- 重启VSCode Java语言服务器
按Ctrl+Shift+P打开命令面板,输入Java: Clean Java Language Server Workspace,确认后重启VSCode,确保配置生效。
验证
修改完成后,重新导入org.apache.commons.vfs2.FileObject和org.apache.commons.vfs2.FileSystemOptions,错误提示应该消失,项目可正常编译运行。
内容的提问来源于stack exchange,提问作者Wayne Richardson
相关产品推荐
相关产品推荐

