# aus Java Programme Jar.datei erstellen (eclipse)



## knut (28. Jan 2008)

Ich habe mit Eclipse (Version: 3.3.0) ein Java Prgramm geschrieben, welches auf eine Oracle Datenbank (glaube 10g) zugreift, mit einem SELECT Statement daten holt und diese dann weiter verarbeitet werden. Das klappt soweit auch ganz gut.

Ich möchte aber jetzt aus dem Programm eine Jar Datei erstellen, nur hier bekomme ich ein Problem. Das Programm hört bei folgende Zeilen einfach auf zu arbeiten (bzw. springt aus der Objekt und wartet auf meine nächste Aktion) es zeigt mir noch das Fenster mit -2a- an aber nicht mehr -3-.


```
JOptionPane.showMessageDialog(sqlkonv,"hallo","step -2a-",1);
	  		OracleDataSource ods = new OracleDataSource();
	  		JOptionPane.showMessageDialog(sqlkonv,sqlkonv.geturl(),"step -3-",1);
	  		ods.setURL(sqlkonv.geturl());
	  		JOptionPane.showMessageDialog(sqlkonv,"hallo","step -4-",1);
```

wenn ich die Datei mit Eclipse exportiere kommt auch eine Fehlermeldung ("JAR creation failed. See details for additional information."), trotzdem läuft das Programm (bis auf dem oben erwähnten Fehler). 

in den Details der Fehlermeldung steht folgendes:

JAR creation failed. See details for additional information.
  Exported with compile warnings: /PKONV0002/src/Query.java
  Exported with compile warnings: /PKONV0002/src/Wcodes.java
  Exported with compile warnings: /PKONV0002/src/DatCreater.java
  Exported with compile warnings: /PKONV0002/src/Vorschau.java
  Exported with compile warnings: /PKONV0002/src/sqlkonv.java
  Exported with compile warnings: /PKONV0002/src/dbHandler.java
  Exported with compile warnings: /PKONV0002/src/Methoden.java
  Resource is out of sync with the file system: '/PKONV0002/Satzaufbau.properties'.


Ich habe zwei Properties die ich mit der Jar gespeichert haben (also im gleichen Verzeichniss) diese kann er auch laden.


----------



## Giftstachel (28. Jan 2008)

hast du die externen bibliotheken, (sql z.b. ) sicher mitkompiliert?


----------



## Wildcard (28. Jan 2008)

> Resource is out of sync with the file system: '/PKONV0002/Satzaufbau.properties'.


Die Satzaufbau.properties wurde ausserhalb von Eclipse verändert  :noe: 
Versuch ein refresh auf dem Workspace.


----------



## Gast (28. Jan 2008)

weiß nicht ob ich die externen bibliotheken mitkompiliert habe, wie geht das?

Auf die Properties kann ich zugreifen da habe ich eigentlich kein problem...


----------



## Wildcard (28. Jan 2008)

Eclipse lässt dich aber nicht exportieren solange die Sache nicht geklärt ist.
*Niemals* Dateien im Workspace ändern ohne das Eclipse das mitbekommt.


----------



## Knut (28. Jan 2008)

gut ich habe die properties erstmal entfernt, jetzt kammen nur warnings (s.o.) ohne fehler... aber funktioniert genauso wie vorher...


----------



## Wildcard (28. Jan 2008)

d.h. hier kann abgehakt werden?


----------



## knut (28. Jan 2008)

nein, habe mich etwas doof ausgedrückt... ich komme immer noch nicht über das zweite fenster hinnaus (also kein zugriff auf die db)..


----------



## Wildcard (28. Jan 2008)

Bitte StackTrace angeben, vermutlich fehlt eine Bibliothek oder eine Resource.


----------



## knut (28. Jan 2008)

Was ist ein StackTrace? 

habe in meinen workspace unter ".metadaten/.log" folgendes gefunden:

!SESSION 2008-01-28 09:29:36.794 -----------------------------------------------
eclipse.buildId=I20070625-1500
java.version=1.5.0_08
java.vendor=Sun Microsystems Inc.
BootLoader constants: OS=win32, ARCH=x86, WS=win32, NL=de_DE
Command-line arguments:  -os win32 -ws win32 -arch x86

This is a continuation of log file H:\Java\workspace\.metadata\.bak_0.log
Created Time: 2008-01-28 15:06:54.558

!ENTRY org.eclipse.wst.sse.ui 2 2 2008-01-28 15:06:54.574
!MESSAGE StructuredTextEditor being used without StructuredDocument

!ENTRY org.eclipse.wst.sse.ui 2 2 2008-01-28 15:06:54.574
!MESSAGE          Input Name: build-jar.txt

!ENTRY org.eclipse.wst.sse.ui 2 2 2008-01-28 15:06:54.574
!MESSAGE         Unexpected IDocumentProvider implementation: org.eclipse.ui.editors.text.TextFileDocumentProvider

!ENTRY org.eclipse.wst.sse.ui 2 2 2008-01-28 15:06:54.574
!MESSAGE         Unexpected IDocument implementation: org.eclipse.core.internal.filebuffers.SynchronizableDocument

!ENTRY org.eclipse.jdt.launching 4 150 2008-01-28 15:13:33.805
!MESSAGE The archive: //srvdcchildgds1.zentral-de.jug.de/homes/kph/Programme/Eclipse/eclipse/homes/kph/Programme/Eclipse/eclipse/plugins/org.eclipse.swt.win32.win32.x86_3.3.0.v3346.jar which is referenced by the classpath, does not exist.


in nem anderen Forum stand das das was damit zu tuen hat...


----------



## outbreaker (28. Jan 2008)

der StackTrace zeigt dir wo deine Fehler aufgetretten sind

das ist das was in der Konsole steht wenn es Fehler bei der Ausführung/Laufzeitfehler (Exception) gegeben hat

Exception#printStackTrace


----------



## knut (29. Jan 2008)

ich bin mir relativ sicher das es daran liegt das ich eine externe bibliothek nicht mitkompeliert habe, aber ich finde einfach nicht raus wie ich die mitkompelieren kann... 

hier mal der komplette quelltext der betroffenden klasse:




```
package sqlkonv;
import java.io.FileInputStream;
import java.io.IOException;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;
[color=darkred]import oracle.jdbc.pool.OracleDataSource;[/color]
import java.sql.*;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.Properties;
import java.lang.Integer;

import javax.swing.JOptionPane;


import oracle.jdbc.*;
import oracle.jdbc.pool.*;
import oracle.sql.*;

// Klasse für die Verarbeitung der Eingabe

public class dbHandler 
{	
	private String url = "";
	private sqlkonv sqlkonv = null;
	private Query query = null;
	private Wcodes wcodes = null;
	private String strwcodes = "";
 	private String kndnrart = "";
	
 	public dbHandler(sqlkonv sqlkonv, Wcodes wcodes)
 	{
 		this.query = new Query(sqlkonv, this);
 		this.sqlkonv = sqlkonv;
 		this.wcodes = wcodes;
 	}
	public void setUrl(String ueb_url)
	{
		url = ueb_url;
	}
	
	public String getkndnrart()
	{
		return kndnrart;
	}
	
	public int erstelletxt()
	{	
		Properties satzaufbau = null;
		try
		{
			satzaufbau = new Properties();
			satzaufbau.load(new FileInputStream("./satzaufbau.properties"));
		}
		catch(Exception Ex)
		{
			JOptionPane.showMessageDialog(sqlkonv,Ex.getLocalizedMessage(),"dbhandler -1-",1);
			System.out.println(Ex.getLocalizedMessage());
		}
		try
		{
			DatCreater datei = new DatCreater();
			Iterator itwcodes = wcodes.getWCodes();
			Iterator itavar = wcodes.getAVar();
			itwcodes.next();
			itavar.next();
			System.out.println("Hallo");
			JOptionPane.showMessageDialog(sqlkonv,"hallo","step -2-",1);
 	  		[color=darkred]OracleDataSource ods = new OracleDataSource();[/color]
	  		JOptionPane.showMessageDialog(sqlkonv,"hallo","step -3-",1);
	  		ods.setURL(sqlkonv.geturl());
	  		int anztitel = query.getanztitel();
			while (itwcodes.hasNext())
			{
				int count = 0;
		  		Connection con = ods.getConnection();
				strwcodes = (String) itwcodes.next();
				Statement stmt = con.createStatement();
				ResultSet rs = stmt.executeQuery(query.erstelle_Query());
				System.out.println("Result Set bekommen...");
				String avar = (String) itavar.next();
				while(rs.next())
				{
					// Sammeln der Daten für die Textdatei:
					count++;
					kndnrart = (String)(rs.getString("kndnrart"));		
//					System.out.println("Kundennr: "+kndnrart);
					String zeile  = "";
 					String[] titel = new String[2];
					for (int i = 1; i < 100; ++i)
					{
						String puf = satzaufbau.getProperty(i+"");
						String sb_values[] = puf.split("~");
						
//						System.out.println(i+": "+sb_values[0]+" - "+sb_values[1]+" - "+sb_values[2]+" - "+sb_values[3]);
						
						if (sb_values[1].equals("ENDE"))
						{
							break;
						}
						if (sb_values[0].equals("eingabe"))
						{
							if(sb_values[1].equals("ausgabegruppe"))
							{
								zeile += this.sqlkonv.getagrp();
							}
							if(sb_values[2].equals("ausgabevariante"))
							{
								zeile += avar;
							}
							continue;
						}
						if (sb_values[1].equals("titel1") || sb_values[1].equals("titel2"))
						{
							for(int akttitel = 1; akttitel <= anztitel;akttitel++)
							{
								if (rs.getString(sb_values[1]+"_"+akttitel) != null)
								{
									zeile += rs.getString(sb_values[1]+"_"+akttitel);
								}else
								{
									int max = Integer.parseInt(sb_values[2]);
									for(int y = 1; y <= max; y++)
									{
										zeile += " ";
									}
								}
							}
						}else
						{
							if (rs.getString(sb_values[1]) != null)
							{
								String add_zeile = "";
								add_zeile = rs.getString(sb_values[1]);
								if (sb_values[3].equals("n"))
								{
									add_zeile = Methoden.nullen(add_zeile,Integer.parseInt(sb_values[2]));
								}
								zeile += add_zeile;
							}else
							{
								int max = Integer.parseInt(sb_values[2]);
								for(int y = 1; y <= max; y++)
								{
									zeile += " ";
								}
							}
						}
						zeile += " [~] ";
					}
					datei.schreibeZeile(zeile);
				}
				System.out.println("Anzahl: "+count);
			}
			datei.beendeSchreiben(); 
			return 0;
		}catch(SQLException e) 
		{
			JOptionPane.showMessageDialog(sqlkonv,"SQLException ("+e.getErrorCode() + "): " +  e.getLocalizedMessage(),"dbhandler -2-",1);
			System.out.println("SQLException ("+e.getErrorCode() + "): " +  e.getLocalizedMessage());
			e.printStackTrace(System.out);
		}
 		catch(IOException e)  
 		{
 			e.printStackTrace(System.out);
 			JOptionPane.showMessageDialog(sqlkonv,"IOException: "+e.getMessage(),"dbhandler -3-",1);
 			System.out.println("IOException: "+e.getMessage());
 		}
  		return 1;
	}
	public String getaktWcode()
	{
		return strwcodes;
	}
}
```


----------



## outbreaker (29. Jan 2008)

liegen deine oracle sachen in einer extra jar datei die du mit in dein Project in Eclipse eingebunden hast?

Wenn ja dann kannst du mithilfe des FatJar Plugins für Eclipse diese jar mit in deine Packen und dann geht es Wunderbar
Dazu findest du hier im Forum viele Threads


----------



## knut (29. Jan 2008)

ich habe paar jar dateien rumliegen, also könnte ich die dann alle mit fatjar in meien jar datei packen und dann funktioniert?

probier ich mal aus, danke


----------



## knut (29. Jan 2008)

mh, fatjar runtergeladen, eclipse gestartet auf fatjar geklickt, nichts passiert...


----------



## outbreaker (29. Jan 2008)

was bedeutet nicht passiert?

Rechtsklick auf dein JavaProjekt und dann hast du im Kontextmenü einen Eintrag mit Fatjar

oder etwas nicht?


----------

