danneu / kog

🌶 A simple Kotlin web framework inspired by Clojure's Ring.
43 stars 4 forks source link

serveStatic - does not find resources from Jar. #24

Open ThraaxSession opened 7 years ago

ThraaxSession commented 7 years ago

Hi @danneu

I've got following snippet:

val public = this::class.java.getResource("/public").path
val static =  serveStatic(public, maxAge = Duration.ofDays(365))

When I run it directly in gradle with ./gradlew run ... it works and I can gather the static files But when I build a fat Jar and run it, it doesn't work. Then I get this error:

WARN [serveStatic] Could not find public resource folder: "file:/home/gino/Programming/myapp/build/libs/myapp-SNAPSHOT.jar!/public". serveStatic skipped...

After unzipping the Jar, I can see that my public folder is there.

Do you have any ideas?

Thanks and best regards Gino

danneu commented 7 years ago

Yeah, I wasn't sure what the right way to do static asset lookup on the JVM.

The code for serveStatic is super simple: https://github.com/danneu/kog/blob/master/src/main/kotlin/com/danneu/kog/batteries/serveStatic.kt

I look for the public folder root via val publicRoot = File(publicFolderPath) and then assert that it's a folder.

Maybe there's a better solution than using File here?

Or maybe, for now, you can pass in a path that works with File(path) instead of "file:/home/gino/Programming/myapp/build/libs/myapp-SNAPSHOT.jar!/public"? Right now you do this::class.java.getResource("/public").path but maybe there's another method other than .path that can give a path that works with serveStatic, like .absolutePath or something.

I can't look it up right now.

ThraaxSession commented 7 years ago

Hmmm... I don't have an idea for it. But we can keep this issue up. And look for a better solution @danneu in future..