You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java模块化项目中Gmail API相关导入无法解析问题求助

模块化JavaFX项目中Gmail API相关导入无法解析的问题

问题概述

基于Java15+、Maven和JavaFX开发的模块化项目,新增Gmail API发送带附件邮件的类后,在非模块化测试项目运行正常,但迁移到主模块化项目时,以下导入无法解析:

com.google.api.client.googleapis.auth.oauth2
com.google.api.client.googleapis.javanet
com.google.api.client.googleapis.json

当前配置

module-info.java

module maven.javafx.hs_doc_gen.HS_Doc_Gen_11 {
    requires javafx.controls;
    requires javafx.fxml;
    requires javafx.swing;
    requires java.sql;
    requires java.desktop;
    requires org.apache.pdfbox;
    requires activation;
    requires mail;
    requires com.google.api.services.gmail;
    requires com.google.api.client;
    requires com.google.api.client.json.gson;
    requires com.google.api.client.extensions.jetty.auth;
    requires org.apache.commons.codec;
    requires com.google.api.client.auth;
    requires com.google.api.client.extensions.java6.auth;
    
    opens maven.javafx.hs_doc_gen.HS_Doc_Gen_11 to javafx.fxml;
    opens gui to javafx.fxml;
    exports maven.javafx.hs_doc_gen.HS_Doc_Gen_11;
    exports gui;
}

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>maven.javafx.hs_doc_gen</groupId>
    <artifactId>HS_Doc_Gen_11</artifactId>
    <version>0.0.2</version>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>15</maven.compiler.source>
        <maven.compiler.target>15</maven.compiler.target>
    </properties>
    <dependencies>

        <!-- JavaFX -->
        <dependency>
            <groupId>org.openjfx</groupId>
            <artifactId>javafx-controls</artifactId>
            <version>21</version>
        </dependency>
        <dependency>
            <groupId>org.openjfx</groupId>
            <artifactId>javafx-fxml</artifactId>
            <version>21</version>
        </dependency>
        <dependency>
            <groupId>org.openjfx</groupId>
            <artifactId>javafx-swing</artifactId>
            <version>21</version>
        </dependency>
        <dependency>
            <groupId>org.openjfx</groupId>
            <artifactId>javafx-graphics</artifactId>
            <version>21</version>
        </dependency>

        <!-- Apache PDF Box -->
        <dependency>
            <groupId>org.apache.pdfbox</groupId>
            <artifactId>pdfbox</artifactId>
            <version>2.0.26</version>
        </dependency>

        <!-- MySQL -->
        <dependency>
            <groupId>com.mysql</groupId>
            <artifactId>mysql-connector-j</artifactId>
            <version>8.2.0</version>
        </dependency>

        <!-- Gmail API with JavaMail -->
        <dependency>
            <groupId>com.google.oauth-client</groupId>
            <artifactId>google-oauth-client-jetty</artifactId>
            <version>1.34.1</version>
        </dependency>
        <dependency>
            <groupId>com.google.api-client</groupId>
            <artifactId>google-api-client</artifactId>
            <version>2.0.0</version>
        </dependency>
        <dependency>
            <groupId>com.google.apis</groupId>
            <artifactId>google-api-services-gmail</artifactId>
            <version>v1-rev20220404-2.0.0</version>
        </dependency>

        <dependency>
            <groupId>javax.mail</groupId>
            <artifactId>mail</artifactId>
            <version>1.4.7</version>
        </dependency>
        <!--        
        <dependency>
            <groupId>com.sun.mail</groupId>
            <artifactId>javax.mail</artifactId>
            <version>1.6.2</version> 
        </dependency>
        -->

    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.0</version>
                <configuration>
                    <release>15</release>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.openjfx</groupId>
                <artifactId>javafx-maven-plugin</artifactId>
                <version>0.0.8</version>
                <executions>
                    <execution>
                        <!-- Default configuration for running -->
                        <!-- Usage: mvn clean javafx:run -->
                        <id>default-cli</id>
                        <configuration>
                             <mainClass>
                                                          maven.javafx.hs_doc_gen.HS_Doc_Gen_11.App
                                                         </mainClass>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

环境信息

  • 系统:Windows 11
  • IDE:Eclipse 2024-03 (4.31.0)
  • Java:JDK21

已尝试操作

尝试添加以下模块声明,均报错“* cannot be resolved to a module”:

com.google.api.client.googleapis
com.google.api.client.googleapis.auth
com.google.api.client.googleapis.auth.oauth2
com.google.api.client.googleapis.javanet
com.google.api.client.googleapis.json

执行mvn clean install时,收到模块不可见、主包未读取模块的错误。


解决方案

1. 补充缺失的依赖包

你当前的依赖中缺少google-api-client-googleapis包,所有无法解析的类都来自这个模块。在pom.xml的<dependencies>中添加:

<dependency>
    <groupId>com.google.api-client</groupId>
    <artifactId>google-api-client-googleapis</artifactId>
    <version>2.0.0</version>
</dependency>

2. 修正module-info.java的requires声明

添加依赖后,在module-info.java中加入:

requires com.google.api.client.googleapis;

注意:你之前尝试添加的子包并非独立模块,它们都属于com.google.api.client.googleapis模块的一部分,只需声明这个父模块即可自动访问所有子包。

3. 统一依赖版本

确保所有Google相关依赖版本一致,当前google-api-client为2.0.0,新增的google-api-client-googleapis也用2.0.0,避免版本冲突。

4. 清理重构项目

执行以下命令清理缓存并重新构建:

mvn clean install -U

同时在Eclipse中执行Project > Clean,右键项目选择Maven > Update Project,确保依赖正确导入。

5. 优化JavaMail依赖(可选)

当前使用的javax.mail:mail:1.4.7版本较老,建议替换为Jakarta Mail实现,提升模块化兼容性:

<dependency>
    <groupId>com.sun.mail</groupId>
    <artifactId>jakarta.mail</artifactId>
    <version>2.0.1</version>
</dependency>

同时将module-info.java中的requires mail;改为:

requires jakarta.mail;

内容的提问来源于stack exchange,提问作者inevit4ble

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 19:14:58