# Jar startet nicht



## 0plan (29. Aug 2011)

Ich habe ein kleines Maven Projekt in Eclipse angelegt. Das Programm ist ein einfachaer JFrame mit Panel und Label. Das Label soll ein ImageIcon beinhalten, dieses wird nach der Kompilierung in Eclipse auch sichtbar. Exportier ich das Projekt als JAR, startet es nicht. Ich hatte es schon zum starten bekommen, doch dann war das Image auch nicht sichtbar.


```
public MavenTest(){
		super("Maven Test");
		setSize(300,300);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setLocationRelativeTo(null);
		JPanel panel = new JPanel();
		JLabel label = new JLabel();
		label.setIcon(new ImageIcon(getClass().getClassLoader().getResource("image.jpg")));
		panel.add(label);
		add(panel);
		setVisible(true);
	}
	
	public static void main(String[]args){
		new MavenTest();
	}
```

Wenn ich die Jar mit Winrar öffne, so sieht die Struktur wie folgt aus:

META-INF
resources (dort ist das Bild auch drin enthalten)
MavenTest.class

Bitte um Hilfe


----------



## 0plan (29. Aug 2011)

Wenn ich anstatt .getResource("image.jpg"))); -->>>>>>> getResource("resources/image.jpg"))); nehme, klappts in der JAR jedoch nicht in Eclipse.


----------



## L-ectron-X (29. Aug 2011)

Grafikdateien laden und anzeigen ? Byte-Welt Wiki


----------



## BlackViruZ (29. Aug 2011)

Hast du dran gedacht die Klasse mit der static void main(String[]) zum Classpath hinzuzufügen in der Plugin Konfiguration vom Maven Archiver ?

Ansonsten lassen sich die jars nicht per "doppelklick" starten, weil in den Metadaten des Jars kein verweis darauf steht.

maven-archiver doku

[XML]<configuration>
          <archive>
            <manifest>
              <addClasspath>true</addClasspath>
              <mainClass>fully.qualified.MainClass</mainClass>
            </manifest>
          </archive>
 </configuration>[/XML]

Wenn das Image nicht sichtbar war, tippe ich darauf, dass du es nicht mit "geliefert" hast, es also nicht mit ins jar gepackt wurde (falls du das so vor hattest).
Um das bei Eclipse zu erwirken, reicht es afair den ordner, in welchem das Bild liegt, als resource ordner zum projekt hinzuzufügen.

Zumindest hatte ich aus dem grund schonmal versehentlich meine junit test reports mit im projekt jar liegen.. XD

#EDIT
Die letzten Zeilen bitte ignorieren.. hab das mit dem Projektaufbau zuspät gelesen, bzw überflogen -.-


----------



## 0plan (29. Aug 2011)

Hab den Resource Ordner im Buildpath da müsste ich doch mit 
	
	
	
	





```
new ImageIcon(MavenTest.class.getResource("src/main/resources/image.jpg")));
```
 das Bild referenzieren oder nicht?

Beim Exportieren legt Maven den src/main/resources Ordner automatisch als "resources" in der Jar ab. Daher sehe ich das Bild nur wenn ich im Konstruktor auch nur "image.jpg" als Pfad angebe.


----------



## L-ectron-X (29. Aug 2011)

Bin mir nicht sicher, weil ich nicht mit Eclipse programmiere und deinen Aufbau der Verzeichnisse nicht kenne.
Aber es sieht erst mal so aus, also würde Folgendes funktionieren:

```
new ImageIcon(MavenTest.class.getResource("resources/image.jpg")));
```


----------



## 0plan (29. Aug 2011)

> Bin mir nicht sicher, weil ich nicht mit Eclipse programmiere und deinen Aufbau der Verzeichnisse nicht kenne.
> Aber es sieht erst mal so aus, also würde Folgendes funktionieren:


 Richtig, so funktionierts in der Jar Datei am Ende, jedoch nicht in Eclipse, dort wirft es eine NullPointerException.


----------



## mvitz (29. Aug 2011)

Poste doch mal einen Screenshot deines Eclipse Projektes.

Normalerweise solltest du das Bild mit

```
new ImageIcon(MavenTest.class.getResource("/image.jpg")));
```
laden können, da maven alles was unter src/main/resources liegt, in den Root des JARs packt. Eclipse sollte eigentlich acuh den Ordner mit in den Build-Path nehmen wodurch obige Zeile dann auch unter Eclipse funktionieren sollte.


----------



## 0plan (29. Aug 2011)

Hier




Uploaded with ImageShack.us

mit einem "/" vor dem Dateinamen klappts in Eclipse, jedoch lässt sich die Jar nicht starten.. Teufelskreis


----------



## Michael... (29. Aug 2011)

0plan hat gesagt.:


> Hab den Resource Ordner im Buildpath da müsste ich doch mit
> 
> 
> 
> ...


Ich nehme mal an, das *main* Dein "oberstes" Package ist:

```
new ImageIcon(MavenTest.class.getResource("/main/resources/image.jpg")));
```


----------



## 0plan (29. Aug 2011)

Die Verzeichnisstruktur wurde von Maven automatisch so generiert, main ist ein Unterordner der Resourcen für die Javadateien.


----------



## mvitz (29. Aug 2011)

Und du hast das JAR auch mit Maven gebaut?


----------



## Michael... (29. Aug 2011)

Wie schaut denn die Struktur im jar aus bzw. ist das Bild überhaupt darin enthalten?
Das jar kann man mit z.B. Winzip öffnen und entpacken.


----------



## 0plan (29. Aug 2011)

> Wie schaut denn die Struktur im jar aus bzw. ist das Bild überhaupt darin enthalten?
> Das jar kann man mit z.B. Winzip öffnen und entpacken.



Siehe Post.1


----------



## mvitz (29. Aug 2011)

Dann hast du das JAR aber definitiv nicht mit Maven gebaut. Wenn du folgendes Eclipse Projekt wirklich mit maven baust, dann sieht es so aus:

```
project.jar
+- META-INF
|  `- MANIFEST.MF
+- image.jpeg
`- MavenTest.class
```

Edit: Evtl. solltest du deine pom.xml auch noch einmal posten.
Edit2: Hab mal ein Beispielprojekt angehängt, bei dem bei mir beides funktionert!


----------



## 0plan (29. Aug 2011)

Das ist nett von dir, meine pom sieht wie folgt aus 

[XML]<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.maven.test</groupId>
  <artifactId>Maven-Test</artifactId>
  <version>1.0.0-SNAPSHOT</version>
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.6</maven.compiler.source>
    <maven.compiler.target>1.6</maven.compiler.target>
  </properties>
</project>[/XML]

sehe da keinen Unterschied


----------



## 0plan (29. Aug 2011)

Hab die Jar nochmals mit "package" als goal erstellt, meine Struktur ähnelt deiner jedoch nicht ansatzweise. Ich bin gerade von Sekunde zu Sekunde verwirrter.


----------



## mvitz (29. Aug 2011)

Meinst du mit meiner, die oben skizzierte oder die, wenn du mein Projekt mit package packst?


----------



## 0plan (29. Aug 2011)

Wenn ich dein .zip öffne


----------



## mvitz (29. Aug 2011)

Laut deinem Screenshot ist dein Projekt aber genau so aufgebaut. Entpacke meines doch einmal und rufe dann darin mvn package auf. Dann kannst du danach ja die beiden JARs mal vergleichen.


----------

