Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Eclipse: export to .jar AND include resource files (ANT)

Our project in eclipse approximately shows the following folders:

application
    - src
    - JRE System Library [1.6]
    - Referenced Libraries
    - lib
    - rsc

In our project, we would like to use File > Export... > Executable JAR

Well that works fine, with some exception: If we want to run our application.jar, we still need to copy the folder rsc/ in the same location as application.jar.

In rsc/, we have other folders for separation of the different parts. Basically, we load the pieces using the code (well a bit altered, but the path style is correct)

strUrl = "file:rsc/properties/Constants.properties";
url = new URL(strUrl);
ImageIcon icon = new ImageIcon(url);

I could rightclick on rsc/ > Build Path > Use as Source Folder.

But this doesn't work either because eclipse doesn't automatically copy the rsc folder into the bin/-folder. And then we cannot run it anymore from terminal (not packaged into jar)

EDIT: why is eclipse unable to handle this correctly? Why does it have problems with "nested" output folders? In the Source-tab of the Build Path dialog, I could easily add the rsc/-folder with the output folder set to bin/rsc/, but it doesn't seem to be able to put nested folders...


EDIT 2: Now I've been able to create an xml-file to build the stuff with ant, and somehow managed to include the rsc-folder right into the jar. Still doesn't run due to the same errors. Do I really need to check the resources paths whether they're in a JAR or not? The JAR's content is now the following:

META-INF/
META-INF/MANIFEST.MF
configurator/
controller/
editor/
gui/
logic/
networking/
rsc/
rsc/gamesettings/
rsc/levels/
rsc/pics/
rsc/properties/
util/

but Java still hates me and throws java.io.FileNotFoundException: rsc/properties/Constants.properties with a stacktrace of around 100 lines.


anybody an idea how to do it? thx & regards

like image 438
Atmocreations Avatar asked Jan 15 '10 16:01

Atmocreations


Video Answer


2 Answers

If you mark rsc as a source folder Eclipse will copy its contents to the output directory. Or you could just move rsc under src if you want to group the resources in the output.

Then you can use Class.getResource("/properties/Constants.properties") or Class.getResource("/rsc/properties/Constants.properties") and it will work regardless if your app is packaged as a jar or running from the source.

As a sidenote, the file: protocol works only with normal files, to access files inside the jar you'd have to use something like new URL("jar:file:app.jar!/rsc/properties/Constants.properties").

like image 158
Dan Berindei Avatar answered Sep 19 '22 22:09

Dan Berindei


You could try: In the Java Build Path dialog, go to the Libraries tab and select "Add Class Folder...". Select rsc from the Class Folder Selection dialog. The contents of the rsc directory will now be included in the executable jar file.

(Note that rsc itself won't be included, so you may have to add a new subdirectory under rsc to make the directory structure in the jar right.)

like image 38
Ash Avatar answered Sep 20 '22 22:09

Ash