使用Maven编译时module-info.java出现模块找不到错误
Maven编译时
module not found错误解决 编译项目时出现以下模块找不到的错误:
/home/TestQuerydsl/src/main/java/module-info.java:2: error: module not found: javafx.controls requires javafx.controls; ^ /home/TestQuerydsl/src/main/java/module-info.java:3: error: module not found: javafx.fxml requires javafx.fxml; ^ /home/TestQuerydsl/src/main/java/module-info.java:4: error: module not found: java.persistence requires java.persistence;
完整的module-info.java代码
module com.intelidia.testquerydsl { requires javafx.controls; requires javafx.fxml; requires java.persistence; opens com.intelidia.testquerydsl to javafx.fxml; exports com.intelidia.testquerydsl; }
完整的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 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.intelidia.testquerydsl</groupId> <artifactId>TestQuerydsl</artifactId> <version>1.0-SNAPSHOT</version> <name>TestQuerydsl</name> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <junit.version>5.10.0</junit.version> <querydsl.version>5.1.0</querydsl.version> </properties> <dependencies> <dependency> <groupId>com.querydsl</groupId> <artifactId>querydsl-apt</artifactId> <version>${querydsl.version}</version> </dependency> <dependency> <groupId>com.querydsl</groupId> <artifactId>querydsl-jpa</artifactId> <version>${querydsl.version}</version> </dependency> <dependency> <groupId>javax.persistence</groupId> <artifactId>javax.persistence-api</artifactId> <version>2.2</version> </dependency> <dependency> <groupId>org.openjfx</groupId> <artifactId>javafx-controls</artifactId> <version>17.0.6</version> </dependency> <dependency> <groupId>org.openjfx</groupId> <artifactId>javafx-fxml</artifactId> <version>17.0.6</version> </dependency> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-api</artifactId> <version>${junit.version}</version> <scope>test</scope> </dependency> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-engine</artifactId> <version>${junit.version}</version> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>com.mysema.maven</groupId> <artifactId>apt-maven-plugin</artifactId> <version>1.1.3</version> <executions> <execution> <goals> <goal>process</goal> </goals> <configuration> <outputDirectory>target/generated-sources/java</outputDirectory> <processor>com.querydsl.apt.jpa.JPAAnnotationProcessor</processor> </configuration> </execution> </executions> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.11.0</version> <configuration> <source>11</source> <target>11</target> </configuration> </plugin> <plugin> <groupId>org.openjfx</groupId> <artifactId>javafx-maven-plugin</artifactId> <version>0.0.8</version> <executions> <execution> <!-- Default configuration for running with: mvn clean javafx:run --> <id>default-cli</id> <configuration> <mainClass> com.intelidia.testquerydsl.testquerydsl/com.intelidia.testquerydsl.testquerydsl.HelloApplication </mainClass> <launcher>app</launcher> <jlinkZipName>app</jlinkZipName> <jlinkImageName>app</jlinkImageName> <noManPages>true</noManPages> <stripDebug>true</stripDebug> <noHeaderFiles>true</noHeaderFiles> </configuration> </execution> </executions> </plugin> </plugins> </build> </project>
错误原因及解决方法
1. java.persistence模块名错误
pom.xml中引入的是javax.persistence-api依赖,对应Java模块系统中的模块名是javax.persistence,而非java.persistence。修改module-info.java:
module com.intelidia.testquerydsl { requires javafx.controls; requires javafx.fxml; requires javax.persistence; // 此处修改 opens com.intelidia.testquerydsl to javafx.fxml; exports com.intelidia.testquerydsl; }
2. JavaFX模块路径配置缺失
Maven Compiler Plugin默认未自动将JavaFX依赖加入模块路径,需在maven-compiler-plugin中添加模块化配置,同时替换老旧的apt-maven-plugin为编译器内置的注解处理器配置:
修改pom.xml中的build/plugins部分:
<plugins> <!-- 替换apt-maven-plugin为maven-compiler-plugin的注解处理器配置 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.11.0</version> <configuration> <source>11</source> <target>11</target> <annotationProcessorPaths> <path> <groupId>com.querydsl</groupId> <artifactId>querydsl-apt</artifactId> <version>${querydsl.version}</version> <classifier>jpa</classifier> </path> </annotationProcessorPaths> <!-- 加入模块路径配置,自动包含依赖中的模块 --> <fork>true</fork> <compilerArgs> <arg>--module-path</arg> <arg>${project.build.directory}/dependency-jars</arg> </compilerArgs> </configuration> <executions> <execution> <id>compile</id> <phase>compile</phase> <goals> <goal>compile</goal> </goals> </execution> </executions> </plugin> <!-- 保留javafx-maven-plugin,确保运行配置正确 --> <plugin> <groupId>org.openjfx</groupId> <artifactId>javafx-maven-plugin</artifactId> <version>0.0.8</version> <executions> <execution> <id>default-cli</id> <configuration> <mainClass>com.intelidia.testquerydsl/com.intelidia.testquerydsl.HelloApplication</mainClass> <launcher>app</launcher> <jlinkZipName>app</jlinkZipName> <jlinkImageName>app</jlinkImageName> <noManPages>true</noManPages> <stripDebug>true</stripDebug> <noHeaderFiles>true</noHeaderFiles> </configuration> </execution> </executions> </plugin> <!-- 添加依赖复制插件,将依赖jar包复制到指定目录供模块路径使用 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <version>3.6.0</version> <executions> <execution> <id>copy-dependencies</id> <phase>compile</phase> <goals> <goal>copy-dependencies</goal> </goals> <configuration> <outputDirectory>${project.build.directory}/dependency-jars</outputDirectory> </configuration> </execution> </executions> </plugin> </plugins>
3. 主类路径冗余修正
javafx-maven-plugin中的mainClass配置存在冗余,改为com.intelidia.testquerydsl/com.intelidia.testquerydsl.HelloApplication(模块名/主类全路径),确保与module-info.java中的模块名一致。
内容的提问来源于stack exchange,提问作者Noor
相关产品推荐
相关产品推荐

