Eclipse-build vs. Jar-Ausführung

Status
Nicht offen für weitere Antworten.

diggaa1984

Top Contributor
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:
Code:
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 😀
 
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:

Code:
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 ^^
 
so, Problem nun endgültig gelöst, nach stundenlangem googlen gestern und paar minuten heute endlich den entscheidenen Hinweis gefunden:

Code:
//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
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben