Java Spring Boot-如何war包凭据文件?
我正在使用gmail API。当我war打包我的应用程序时,我的client_secrets.json和凭证文件不在其中。如何确保它们可供使用?如果您使用的是Maven或Gradle,则需要将它们放入Java Spring Boot-如何war包凭据文件?,java,spring,spring-boot,gmail-api,Java,Spring,Spring Boot,Gmail Api,我正在使用gmail API。当我war打包我的应用程序时,我的client_secrets.json和凭证文件不在其中。如何确保它们可供使用?如果您使用的是Maven或Gradle,则需要将它们放入/src/main/resources/client\u secrets.json中。(不在项目的根文件夹中!) 然后它们就在罐子里了 然后,您可以像下面这样将其加载到GoogleClientSecrets: InputStream in = XXX.class.getResourceAsStrea
/src/main/resources/client\u secrets.json
中。(不在项目的根文件夹中!)
然后它们就在罐子里了
然后,您可以像下面这样将其加载到GoogleClientSecrets
:
InputStream in = XXX.class.getResourceAsStream("/client_secrets.json");
GoogleClientSecrets clientSecrets =
GoogleClientSecrets.load(JSON_FACTORY, new InputStreamReader(in));
XXX.class.getResourceAsStream("/folder/filename");
XXX
您应该用您的类名替换。谷歌在他们的快速入门中也使用了同样的方法。见:第3步
更新您的评论:
放置在/src/main/resources
中的所有内容都位于war文件的“根”中。这意味着它们位于类路径的根中。您可以通过类加载器(而不是FileInputStream)访问所有这些内容,如下所示:
InputStream in = XXX.class.getResourceAsStream("/client_secrets.json");
GoogleClientSecrets clientSecrets =
GoogleClientSecrets.load(JSON_FACTORY, new InputStreamReader(in));
XXX.class.getResourceAsStream("/folder/filename");
您提到的FileInputStream
通常仅用于访问war
您对InputStream in=newfileinputstream(“src/main/resources/credentials/gmail/client_secret.json”)的建议只在IDE中工作,因为那里确实存在文件夹
src/main/resources
。当您将其打包为war
时,正如我前面所述,src/main/resources
的内容将被移动到war的根目录中,谢谢!资源并不打包静态文件。如果我想在战争中部署怎么办?“src/main/resources/credentials/gmail/client_secret.json”仍然有效吗?是的,在war
中-包模式/src/main/resources
也被考虑。否则,您的所有日志配置和类似的内容都将在war文件中。这是你问的吗?不完全是…我现在如何引用这些资源?InputStream in=newfileinputstream(“src/main/resources/credentials/gmail/client_secret.json”);不起作用了。我更新了答案,你能检查一下这是否对你有意义吗?有意义,在我再次尝试部署之前替换东西…我该如何更改数据\u STORE\u DIR=new File(“src/main/resources/credentials/gmail”);到?不要将它们打包到可执行文件中;改为在运行时提供它们。@chrylis您的意思是在war文件之外托管client_secrets.json吗?或者不使用json并从环境变量或属性构建凭据对象。Spring Boot配置属性使这很简单。@chrylis如果我在ubuntu上从tomcat运行war,我可以将它指向哪个目录?(我不确定允许tomcat用户访问哪些目录…)您应该能够在tomcat配置中设置应用程序的属性。