In Java, where in the package/source hierarchy should resources be placed?

You can always adopt a standard Maven approach to your project and put all application source files in:

{home}/src/main/java/com/dmxio/games/breakout

and then your resources live in:

{home}/src/main/resources/com/dmxio/games/breakout

and your tests then live in:

{home}/src/test/java/com/dmxio/games/breakout

This structure is a standard convention to structuring projects in the Maven world. It brings a lot of advantages with it, which you may want to look at. You can check out the resources section here: Apache Maven Guides - How do I add resources to my JAR

Alternatively :) the other answer's approach here is just fine...


I have seen this handled in a number of different ways:

  • Place your resources directly in a subdirectory under com/dmxio/games/breakout (e.g. /com/dmxio/games/breakout/images/foo.gif and /com/dmxio/games/breakout/images/bar.gif)

  • Place your resources in a jar along with your class files (e.g. foo.gif and bar.gif bundled in breakout.jar)

  • Place your resources in a separate 'resources jar' in a subdirectory under com/dmxio/games/breakout (e.g. foo.gif and bar.gif bundled in /com/dmxio/games/breakout/images/images.jar)

I tend to favor the last option.

You can then use the java.lang.Class.getResource() method to retrieve your resources.