Zum Inhalt springen

Poi


Alex_winf01

Empfohlene Beiträge

Ich habe eine "blöde" Frage:

Ich habe folgende Struktur:

Ordner image --> Hier lege ich alle Bilder für meine Anwendung ab.

Ordner POI --> Im Unterordner poi251 liegt die Meta-Inf und der org-Ordner für POI

Nun habe ich für POI ein kleines Beispiel ausprobiert. Klappt auch solange ich die .java-Datei im Ordner POI liegen habe. Die import-Anweisung sieht wie folgt aus:

import org.apache.poi.hssf.usermodel.HSSFCell;

D. h. ja, im Ordner org --> Unterordner apache --> unterordner poi --> unterordner hssf --> Unterordner usermodel gibt es eine Klasse HSSFCell.

Es ist Bedingung, dass ich beim Anwender den CLASSPATH und die PATH-Variable NICHT ändere (Vorgabe vom Unternehmen).

Die import-Anweisung muss ich also meinem oben genannten Schema anpassen. D. h. die import-Anweisung müsste wie folgt aussehen:

import POI.poi251.org.apache.poi.hssf.usermodel.HSSFCell;

Wenn ich das so importiere, bekomme ich eine Fehlermeldung, dass POI kein gültiges package ist.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Es ist Bedingung, dass ich beim Anwender den CLASSPATH und die PATH-Variable NICHT ändere (Vorgabe vom Unternehmen).
Dann wirst du nicht wirklich weiterkommen.

import POI.poi251.org.apache.poi.hssf.usermodel.HSSFCell;

Wenn ich das so importiere, bekomme ich eine Fehlermeldung, dass POI kein gültiges package ist.

Natürlich, weil POI eben im Package org.apache.poi.hssf.usermodel.HSSFCell definiert ist und nicht in dem von dir angegebenen Package. Das wird während des Compiler-Vorgangs festgelegt und hat nichts mit der Art und Weise des späteren Deployments zu tun. Vielleicht beschäftigst du dich nochmal mit den Java Grundlagen bevor du weiterhin auf solche - höchst ungewöhnlichen - Ideen kommst.
Link zu diesem Kommentar
Auf anderen Seiten teilen

@ perdi

Mir sind die Grundlagen von Java sehr wohl bekannt. Sind die Vorgaben von meinem Unternehmen.

Es gibt ja zwei Möglichkeiten, Package einzubinden:

1. Man bindet es in der CLASSPATH ein

2. Das Package liegt im Ordner der Anwendung

Zu 2. habe ich folgendes Problem:

Ich benötige noch den ODBC-Treiber für MySQL. Und da gibt es auch ein Ordner Meta-Inf. Vielleicht dazu einen Rat?

Ich benötige beide Package bzw. Treiber!!! Und damit natürlich auch bei beiden eine Mainfest-Datei.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Mir sind die Grundlagen von Java sehr wohl bekannt.
Und dann kommst du trotzdem auf die Idee "einfach mal so" den Package-Namen zu verändern? Das passt nicht zusammen.

Sind die Vorgaben von meinem Unternehmen.
Dann musst du demnjenigen in deinem Unternehmen, der die Vorgaben gemacht hat, sagen, dass du die gewünschten Features ohne eine Veränderung am Classpath nicht in die Applikation mit aufnehmen kannst.

2. Das Package liegt im Ordner der Anwendung
Das allerdings auch nur dann - und genau dann - wenn der Classpath auch den Ordner der Applikation mit einschließt. Das ist - je nach Deployment - nicht automatisch der Fall. Und ohne genau diese Deploymentstruktur zu kennen wird dir hier auch niemand genau sagen können, an welcher Schraube du eventuell drehen könntest. Also: Wie genau wird die Applikation gestartet? (Kommandozeilenbefehl raussuchen)

Und damit natürlich auch bei beiden eine Mainfest-Datei.
Was bringt dich auf den Gedanken unbedingt die Manifestdatei zu brauchen?
Link zu diesem Kommentar
Auf anderen Seiten teilen

Also, wenn die Anwendung fertig ist, wird sie übe ein JAR-File gestartet. In diesem JAR-File liegen die .class-Dateien und natürlich die benötigten Package für POI und den Treiber für MySQL.

Wenn ich jetzt POI entzippe, habe ich zwei Ordner - einmal den Ordner org (wo alle wichtigen Klassen für POI drinnliegen) und einmal den Ordner META-INF, wo die Datei MANIFEST.MF drinnliegt.

Für MySQL benötige ich den mysql-connector. Wenn ich da entzippe, habe ich drei Ordner - einmal den Ordner org, den Ordner com und auch wieder den Ornder META-INF, wo auch die Datei MAINFEST.MF drinnliegt.

Bei mySQL lade ich den Treiber wie folgt in meiner .java-Datei:

String myDrivers =

            "com.mysql.jdbc.Driver" 

Wenn ich den Ordner com in das Verzeichnis meiner Applikation kopiere, dann läuft die Verbindung zu mySQL auch. Definitiv!! Habe ich ausprobiert. Es MUSS nur der Ordner com im selben Verzeichnis liegen. So kann ich ohne Probleme Tabellen anlegen, Daten in die Tabelle einfügen, bearbeiten und löschen.

Nun habe ich gedacht, ich lege die Ordner von POI und die Ordner von mySQL in das Verzeichnis meiner Applikation. Bei POI brauche ich den Ordner org und bei mySQL brauche ich den Ordner com. Jetzt ist es so, dass ich zweimal den Ordner org habe (muss also den von POI mitnehmen und nicht den von mySQL). Ich habe gedacht, ich brauche auf jeden Fall von beiden Anwendungen den Ordner META-INF. Die brauche ich nicht? Ich kann mich noch erinnern, dass mal davon in diesem Forum die Rede war.

Hier haben wir die Diskussion schon mal geführt:

http://forum.fachinformatiker.de/java/94468-hsqldb-connection-problem.html

Und dafür brauche in die Mainfest-Datei. In der Mainfest-Datei für mySQL steht im übrigen das drin:

Manifest-Version: 1.0

Created-By: Apache Ant 1.5

Wie muss dann so eine Mainfest-Datei aussehen? Da habe ich bis jetzt keinerlei Erfahrung.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Also, wenn die Anwendung fertig ist, wird sie übe ein JAR-File gestartet.
Das ist immer noch keine Antwort auf die Frage. Willst du Hilfe haben oder nicht? Wenn ja, dann beschreibe bitte genau wie die Applikation gestartet wird, inklusive Kommandozeilenaufruf.

Heisst "über ein JAR File starten" nun "java -jar x.jar" oder "java -cp x.jar foo.Bar"?

Bei mySQL lade ich den Treiber wie folgt in meiner .java-Datei: String myDrivers = "com.mysql.jdbc.Driver"
So lädts du keinen JDBC Treiber. So weisst du den Wert "com.mysql.jdbc.Driver" dem String "myDrivers" zu - mehr auch nicht.

Die brauche ich nicht? Ich kann mich noch erinnern, dass mal davon in diesem Forum die Rede war.
Du benötigst in diesem Falle keine Manifest Datei. Nochmal: Informiere dich über die Grundlagen, wie ein Java Programm gestartet wird und wofür z.B. eine Manifest Datei überhaupt da ist.

Hier haben wir die Diskussion schon mal geführt:
Und wieso befolgst du dann nicht einfach die Tips, die dort schon gegeben worden sind?!

Wie muss dann so eine Mainfest-Datei aussehen? Da habe ich bis jetzt keinerlei Erfahrung.
Dann besorg dir diese Erfahrung:

http://www.google.com/search?hl=de&ie=UTF-8&q=tutorial%20java%20manifest

Der erste Link sieht schonmal sehr interessant aus.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Aufruf des Programms: java -jar dateiName.jar

Der DAU draussen klickt selbstverständlich mit einem Doppelklick auf das JAR-File. Das geht laut JAR-File öffnen

Und laut GoTo Java gehts auch so.

Meine einzigste Frage:

Damit die Anwendung läuft, brauche ich POI UND mySQL. Dafür muss ich den Treiber von mySQL mitliefern und das Package von POI.

Genügt es, wenn ich den com-Ordner von mySQL und den org-Ordner von POI mitliefere? D. h. ich möchte in der Anwendung dann Excel-Sheets anlegen können und dort auch Daten reinschreiben können. Gleichzeitig sollen die Daten in der Datenbank abgespeichert werden.

Hintergrund:

In meinem Datenbank-Projekt vor einer geraumen Zeit, habe ich eine Java-Anwendung geschrieben, diese in ein JAR-File gepackt und dort auch nur den com-Ordner von mySQL mit reingepackt. Das lief. Ein externer Tester hat das Programm dann mit Doppelklick gestartet und konnte ohne Probleme Daten in die DB reinschreiben, lesen und verändern. Damals habe ich eine vorgegebene Mainfest-Datei mit ins JAR-File gelegt und brauchte mich über die CLASSPATH keine Gedanken machen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Das ist unglaublich. Anstatt eine doofe Testklasse zu erzeugen wo der MySQL-Treiber geladen wird und dazu noch irgendein POI-Objekt erzeugt wird frägst du hier tagelang rum. Das wär doch wirklich nicht allzu schwer gewesen, oder?

MySQL entpacken

POI entpacken

Testklasse erstellen

JAR-File draus mache

Alle Ordner bis auf META-INF in das JAR kopieren

Testen

Fertig

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...