Java 无法访问 com.google.auth.Credentials

Java Cannot access com.google.auth.Credentials

我正在使用 Firebase 为客户端开发一个简单的 JavaFx 应用程序。

此应用程序在没有 JavaFx 的情况下也能完美运行,但是我必须重新创建此项目才能让 JavaFx 使用它(简单地添加依赖项不起作用)。

我知道这个问题可能重复,但我已经尝试了几乎所有之前建议的方法。 (链接了我在下面尝试过的那些)

使用 GoogleCredentials 时,应用程序抛出此错误:

java: cannot access com.google.auth.Credentials
  class file for com.google.auth.Credentials not found

这是具有方法的 class:(参见私有构造函数)

public class DataManage {
    private FirebaseOptions options;
    private Firestore firestore;
    private FirebaseAuth mAuth;

    public static DataManage getInstance() {
        return Holder.INSTANCE;
    }

    public void initApp() {
        FirebaseApp.initializeApp(options);
    }

    public UserRecord getUserInfo(String email) {
        try {
            return mAuth.getUserByEmail(email);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    public void getUserDataFromDate(String email, Date date) {
        try {
            //Todo add stuff later
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /// I call the GoogleCredentials.fromStream() method here
    private DataManage() {
        try {
            FileInputStream inputStream = new FileInputStream("service-account.json");

            options = FirebaseOptions.builder()
                    .setCredentials(GoogleCredentials.fromStream(inputStream))
                    .setDatabaseUrl("https://attendance-349db.firebaseio.com/")
                    .build();

            FirebaseApp.initializeApp(options);

            firestore = FirestoreClient.getFirestore();
            mAuth = FirebaseAuth.getInstance();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private static class Holder {
        private static final DataManage INSTANCE = new DataManage();
    }
}

这是我的maven依赖文件:(为了避免混乱,只包含依赖和构建的一部分)

依赖关系:

<dependencies>
        <dependency>
            <groupId>com.google.firebase</groupId>
            <artifactId>firebase-admin</artifactId>
            <version>8.1.0</version>
            <exclusions>
                <exclusion>
                    <groupId>com.google.oauth-client</groupId>
                    <artifactId>google-oauth-client</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.openjfx</groupId>
            <artifactId>javafx-controls</artifactId>
            <version>17-ea+11</version>
        </dependency>
        <dependency>
            <groupId>org.openjfx</groupId>
            <artifactId>javafx-fxml</artifactId>
            <version>17-ea+11</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>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <source>17</source>
                    <target>17</target>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.openjfx</groupId>
                <artifactId>javafx-maven-plugin</artifactId>
                <version>0.0.6</version>
                <executions>
                    <execution>
                        <!-- Default configuration for running with: mvn clean javafx:run -->
                        <id>default-cli</id>
                        <configuration>
                            <mainClass>com.indo.attendanceserver/com.indo.attendanceserver.Main</mainClass>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

我的模块:

module com.indo.attendanceserver {
    requires javafx.controls;
    requires javafx.fxml;
    requires firebase.admin;
    requires google.cloud.firestore;
    requires com.google.auth.oauth2;


    opens com.indo.attendanceserver to javafx.fxml;
    exports com.indo.attendanceserver;
    exports com.indo.attendanceserver.scenes.intro;
    opens com.indo.attendanceserver.scenes.intro to javafx.fxml;
    exports com.indo.attendanceserver.scenes.user;
    opens com.indo.attendanceserver.scenes.user to javafx.fxml;
}

以下是我已尝试但未奏效的建议的链接:

.

Latest version for both

No updates from this person

非常感谢任何帮助。

我已经解决了这个问题。

我所要做的就是添加

requires com.google.auth;

到我的 module-info.java 文件。

最终文件看起来像这样:

module com.indo.attendanceserver {
    requires javafx.controls;
    requires javafx.fxml;
    requires firebase.admin;
    requires google.cloud.firestore;
    requires com.google.auth.oauth2;
    requires com.google.auth;



    opens com.indo.attendanceserver to javafx.fxml;
    exports com.indo.attendanceserver;
    exports com.indo.attendanceserver.scenes.intro;
    opens com.indo.attendanceserver.scenes.intro to javafx.fxml;
    exports com.indo.attendanceserver.scenes.user;
    opens com.indo.attendanceserver.scenes.user to javafx.fxml;
}

我希望这对正在寻找答案的人有所帮助。