当前位置: 首页 > 知识库问答 >
问题:

Jar文件找不到凭据。json

闾丘淇
2023-03-14

我正在尝试将java项目构建为一个jar文件,它需要google凭据才能运行。

运行此命令时:

java -jar updateservice.jar

我收到这个错误:

Exception in thread "main" java.io.FileNotFoundException: Resource not found: src/main/resources/credentials.json

我按如下方式存储凭据的路径:

private static final String CREDENTIALS_FILE_PATH = "src/main/resources/credentials.json";

我使用此方法从资源文件夹检索凭据:

    private static Credential getCredentials(final NetHttpTransport HTTP_TRANSPORT) throws IOException {
    // Load client secrets.
    InputStream in = Main.class.getResourceAsStream(CREDENTIALS_FILE_PATH);
    if (in == null) {
        throw new FileNotFoundException("Resource not found: " + CREDENTIALS_FILE_PATH);
    }
    GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(JSON_FACTORY, new InputStreamReader(in));

    // Build flow and trigger user authorization request.
    GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(
            HTTP_TRANSPORT, JSON_FACTORY, clientSecrets, SCOPES)
            .setDataStoreFactory(new FileDataStoreFactory(new java.io.File(TOKENS_DIRECTORY_PATH)))
            .setAccessType("offline")
            .build();
    LocalServerReceiver receiver = new LocalServerReceiver.Builder().setPort(8888).build();
    Credential credential = new AuthorizationCodeInstalledApp(flow, receiver).authorize("user");
    //returns an authorized Credential object.
    return credential;
}

我不明白我需要做什么来避免这个错误。任何帮助都将不胜感激。

共有1个答案

董谦
2023-03-14

当maven将源代码“翻译”为包时,它会更改文件夹结构。

在一个jar包装中:

  • src/main/java编译的源代码转到jar的根目录(将java包保持为文件夹结构)
  • src/main/resources也转到jar的根目录

因此,一旦打包了jar,您的文件就位于归档文件的根目录中。实际上,jar文件只是具有不同扩展名的zip文件,所以您可以使用任何zip管理器打开并浏览它。

那么,你怎么能访问文件?您必须从jar的类加载器(而不是System Class Loader)将其作为资源加载。您可以使用yoir jar中的任何类来加载资源,因为它将资源委托给它的类加载器。如果要加载文件的类是MyClass,请尝试:

InputStream is = MyClass.class.getResourceAsStream("/credentials.json");

您将有一个InputStream指向该文件,可以随意使用它。

 类似资料:
  • 我正在尝试使用GitHub将Gradle Java应用程序部署到Heroku。回购协议的名称是“v-m-test”。这是我目前使用的Procfile:web:java-jar-target/v-m-test。罐子这是错误的文件吗?

  • 我有独立的应用程序,它绑定在可执行的中。在可执行的清单文件中,有一个class-path条目,其中列出了所有依赖的(包括所有的日志实现jar)。这个可执行jar还包含文件。 使用这种结构,当我使用简单的命令运行应用程序时,应用程序在正确的日志记录下运行良好。但这里的主要问题是,要更改日志级别,需要打开jar文件,而我不能要求客户端这样做。所以我将放在了jar外部,但现在所有日志记录都发生在控制台上

  • 问题内容: 我在程序中使用以下代码来加载属性文件: 该代码在Eclipse中运行良好。然后,将程序打包到一个名为MyProgram.jar的JAR中,然后运行它,第二行得到了NullPointerException。JAR不包含属性文件,它们都位于同一目录中。我正在使用Maven创建JAR。我该如何解决这个问题? 更新:我不想将属性文件添加到JAR中,因为它将在部署时创建。 问题答案: Balus

  • 问题内容: 第一:我意识到这个问题应该很简单,很多人似乎都经历过。但是,看来我的问题可能与现有职位 略有 不同。 我正在使用NetBeans编译Java应用程序。构建完成后,输出将正确进入dist \文件夹。jar文件存在于此。如果我转到命令行,请导航到该文件夹​​,然后调用以下命令: java -jar Prosperity.jar 一切正常。显然,该应用程序的名称为Prosperity。以下命

  • 我在我支持的许多应用程序中实现了Flyway,它像梦一样工作。 但是,当我将应用程序部署到测试环境时,迁移就停止了。 经过一些调查,我发现当迁移被加载到jar文件中时,它们不是通过Flyway定位的,而是当它们没有被压缩时(比如当我在Eclipse中工作时,或者如果我将jar解压到类路径中),它会按预期工作。 由于应用程序的插件架构,我无法使用“默认”设置,因此我将Flyway对象设置为: 如果要

  • 我想知道如何在Eclipse中的源代码包(即/src/resources/images/或/resources/images/)内部或外部的资源文件夹中创建一个具有资源(图片、PDF)的可运行JAR。目前,我的资源在我的eclipse项目的source文件夹中,但我也在包中的它自己的文件夹中尝试过。该程序在eclipse中构建和执行得很好,但当我将其导出为可运行的jar时,在桌面上运行时,我总是得