# Eclipse-build vs. Jar-Ausführung



## diggaa1984 (15. Jun 2008)

so, nachdem ich nun stundenlang gekämpft habe um classpathes und ordnerstrukturen so zu erstellen das mein programm mit dem code läuft wie ich es gern hätte .. funzt das zwar in eclipse .. aber sobald ich das ganze als Jar exportiere findet er weder das eine noch das andere ^^

konkret (eclipse bin-ordner):
AocRessourceViewer/bin

aocRessourceViewer
[list:895962a0bd]data //classes
gui //classes
res
[list:895962a0bd]Ressource.properties
AocRessourceViewer.class[/list:u:895962a0bd]
ressources

Ressource_de.properties //und weitere
[/list:u:895962a0bd]

TestOrdner mit JAR-File:
C:/Test

RessourceViewer.jar
ressources
[list:895962a0bd]Ressource_de.properties //und weitere
[/list:u:895962a0bd]

So, aehm Pfad beim Ausführen in eclipse ist der bin-Ordner ... zusätzlich hab ich da noch den "src/aocRessourceViewer/res"-Ordner in der Classpath angegeben, allerdings wohl nur für die Run-Settings.

Die sache ist nun:

```
public class AocRessourceViewer {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		try {
			int b = System.in.read();
				
			switch (b) {
			case 48: loadDefault();
					break;
			case 49: loadFromFile();
					break;
			default:System.out.println("aeh wie jetzt"); 
					break;
			}
		} catch (Exception e) {
		}
	}//main
	
	private static void loadDefault() {
		ResourceBundle myResources = ResourceBundle.getBundle("Ressources");
		System.out.println(myResources.getString("t1_wood"));
	}
	
	private static void loadFromFile() {
		ResourceBundle myResources = ResourceBundle.getBundle("ressources.Ressources");
		System.out.println(myResources.getString("t1_wood"));
	}
}//AocRessourceViewer
```
Funktioniert in Eclipse wunderbar ... je nach Eingabe kann ich da quasi im Nutzer-Ordner "ressources" suchen oder in dem Ordner der noch über den classpath eingebunden wurde.

So wenn ich das Jar-File starte funktioniert gar nix von beiden. hätt ja wenigstens gehofft das ich den "ressource"-Ordner ansprechen kann aber auch das klappt net. Weiss jemand Rat? Die Ordnerstrukturen sind ja angegeben, war so froh das ich das endlich hinbekommen hatte in Eclipse und nichtsahnend testete ich das Jar-File und ... bääh volle Breitseite  :bahnhof:  ... Wenn das klappt, dann hab ich keine Sorgen mehr mit ResourceBundles .. versprochen ^^

Die Ressource.properties wäre dann in  RessourceViewer.jar/aocRessourceViewer/res glaube ich, zumindest ist die eben mit reingebaut, die anderen properties sollen im öffentlichen "ressource"-Ordner bleiben.

So wildcard .. darfst


----------



## M.L. (15. Jun 2008)

Stimmt die package Anweisung: http://www.galileocomputing.de/open...03_011.htm#ixb654e925eed7a0b53a61e24264b73a0a ?


----------



## diggaa1984 (15. Jun 2008)

jut, hab den classpath-eintrag für Run-settings aus eclipse entfernt und navigier nun mittels "acoRessourceViewer.res.Ressources" zum default-file (Ressources.properties) ... nu hab ich aber wieder das problem:

wie komm an den öffentlichen "ressources"-Ordner ran, der im selben verzeichnis liegt wie die *.jar?
aktueller Stand:


```
private static void loadDefault() {
		ResourceBundle myResources = ResourceBundle.getBundle("aocRessourceViewer.res.Ressources");
		System.out.println(myResources.getString("t1_wood"));
	}
	
	private static void loadFromFile() {
		ResourceBundle myResources = ResourceBundle.getBundle("ressources.Ressources");
		System.out.println(myResources.getString("t1_wood"));
	}
```

quasi in der 2. Methode würde ich gern auf den Ordner ressources im Verzeichnis verweisen, wo auch der Nutzer datein manipulieren darf  :bahnhof:  (siehe Aufbau Test-Ordner oben)


 a never ending story wie mir scheint ^^


----------



## diggaa1984 (15. Jun 2008)

so, Problem nun endgültig gelöst, nach stundenlangem googlen gestern und paar minuten heute endlich den entscheidenen Hinweis gefunden:


```
//innerhalb des jar-Archivs
	private static void loadDefault() {
		ResourceBundle myResources = ResourceBundle.getBundle("aocRessourceViewer.res.Ressources");
		System.out.println(myResources.getString("t1_wood"));
	}
	
	// Verzeichnis relativ zum aktuellen
	private static void loadFromFile() {
		try {
			ResourceBundle myResources = new PropertyResourceBundle(
					new BufferedReader(
							new FileReader("ressources/Ressources_de.properties")));
			System.out.println(myResources.getString("t1_wood"));
		} catch (Exception e) {
			System.out.println("Exception in loadFromFile");
		}
	}
```

PropertyResourceBundle mitm InputStream verknüpfen welcher auf externe Datei gelinkt wird.
Man wattn Krampf, aber dafür hab ich nu alles was ich wollte ^^  :###   :meld:

Muss zwar dann explizit den Namen des RessourceFiles angeben (also ohne Locale-Parameter), aber das dürfte so schwer nicht werden, da der Nutzer später per Liste oder comboBox wählen kann, anhand der datein die in dem Ordner liegen, oder eben ner "default"-Einstellung, welche im Jar liegt


----------

