如何把项目的res文件放到同一个文件夹的jar文件中?

我有gradle问题。 我需要res文件夹中的位置与项目中的位置完全一样,以便以“unbuild”项目中相同的方式将可执行文件发送到资源。 我的项目文件树:

Project +--src +--main |--kotlin +--res 

在项目资源使用情况下,我按以下方式解决:

 var serviceAccount = FileInputStream("src/main/res/my_resource_file.json") 

而且我需要在汇编保存在jar文件中的资源文件的项目位置

我的build.gradle文件:

 group 'Bot' version '1.0' buildscript { ext.kotlin_version = '1.1.2' repositories { mavenCentral() jcenter() } dependencies { classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } } apply plugin: 'kotlin' repositories { mavenCentral() } ext { jsoup = "1.10.2" //... firebase_admin = "5.0.0" } dependencies { compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" //... compile "com.google.firebase:firebase-admin:$firebase_admin" } sourceSets { main.java.srcDirs += 'src/main/kotlin/' test.java.srcDirs += 'src/test/kotlin/' main { resources { srcDirs = ["src/main/res"] } } } jar { manifest { attributes 'Main-Class': 'com.my.bot.MainKt' } from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } } } 

我怀疑你需要配置这个部分jar{//...} ,但我不知道在gradle中做了什么

通常情况下,您可以引用如src/main/resources中的src/main/resources作为源文件夹,然后通过Gradle将其复制到您的JAR中。 然后使用Classloader将资源读取为流。

如果我在src/main/resources/my_resource_file.json放置一个文件,它将通过以下方式加载:

 // relative to the current class package location val input = javaClass.getResourceAsStream("/my_resource_file.json") // or use system classloader val input = ClassLoader.getSystemClassLoader().getResourceAsStream("my_resource_file.json") 

而是以非标准方式使用res作为目录名称而不是resources并尝试以文件而不是类路径资源的形式访问它。 在Gradle文档(类似于Maven)中,他们解释了文件布局: Gradle Java Project Layout