由 jsp 调用的 jar 方法读取的文件的位置



我在jsp页面中遇到了各种问题,因为我试图读取.p12文件(谷歌服务帐户密钥文件),但jar文件中的方法找不到它。

jsp文件名为modDrive.jsp,位于DinamicWeb项目的WebContent文件夹中。我已经将miGoogle-drive.jar添加到lib文件夹中(并将源文件添加到WEB-INF/classes/miGoogle文件夹中)。

modDrive.jsp对jar文件中的DriveConnect静态类进行以下两个调用:

DriveConnect.setKEY_PATH("privatekey.p12");
DriveConnect.entrada("email@domain.net");

问题在于entrada方法:

public static void entrada(String serviceAccountUser) {
        try {
          try {
            HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();
            GoogleCredential googleCredential = null;
                googleCredential = new GoogleCredential.Builder().setTransport(HTTP_TRANSPORT)
                        .setJsonFactory(JSON_FACTORY)
                        .setServiceAccountId(SERVICE_ACCOUNT_EMAIL)
                        .setServiceAccountScopes(Collections.singleton(DriveScopes.DRIVE))
                        .setServiceAccountPrivateKeyFromP12File(KEY_FILE)
                        .setServiceAccountUser(serviceAccountUser)
                        .build();

具体的问题是KEY_FILE(源自之前设置的KEY_PATH)找不到它,显然我得到了一个找不到文件的错误。。。正如你所能想象的,我试图将.p12文件放在所有文件夹中,但什么都没有,我也试图将a/作为KEY_PATH字符串的第一个字符,但没有办法。。。

任何帮助都将不胜感激。:-)

哦,是的,在以前的代码中,它作为cmd项目(没有jar文件)运行得很好,在该项目中,.p12文件位于该项目的根文件夹中。

只传入相对文件名可能会导致它在进程的工作目录中查找,这可能在不同的运行时环境之间发生变化。

如果你可以在setServiceAccountPrivateKeyFromP12File()中传递一个绝对路径名,你可以通过这种方式可靠地获得绝对路径:

new File(MyClass.class.getResource("privatekey.p12").toURI()).getAbsolutePath()

在这种情况下,"privatekey.p12"文件名是相对于MyClass的,您可能需要对其进行相应的调整。

最新更新