以下のような構造のフォルダ構成から、graphql以下のファイルを全て取得します。これはMain-Classがあるモジュールから参照されているモジュールとします。jarファイルには既に含まれているとします。
graphql/filename1.graphqls graphql/filename2.graphqls graphql/filename3.graphqls ...
よくある回答
特定の1つのファイルでの例は以下です。
[kotlin]
ClassLoader.getSystemClassLoader().getResource("graphql/filename1.graphqls")!!.readText()
ファイル名を取得する例は以下です。
しかし、この例ではIntelliJの実行等ではファイル名が取得できますが、Gradle Application Pluginで作成したものから起動する場合は取得できません。
ClassLoader.getSystemClassLoader().getResourceAsStream("graphql/")!!.bufferedReader().readText()
回答
GraphqlSchemaModule
の部分は取得したいモジュールのクラスなら何でも良いです。
jarファイルの場所を特定してそれを読み込みます。
val currentJarUri = GraphqlSchemaModule::class.java.protectionDomain.codeSource.location.file val jarFIle = JarFile(currentJarUri) return JarFile(currentJarUri) .entries() .toList() .filter { it.isDirectory.not() } .filter { it.name.startsWith("graphql/") } .map { jarFIle.getInputStream(it).bufferedReader().readText() }