wie kriege ich eine *.dtd Datei mit in die ausführbare *.jar?

ProgrammierFee

Neues Mitglied
Hi,
ich habe ein Java Projekt erstellt was XML Dateinen einliest (beim xml lesen wird eine *.dtd Datei benötigt) und diese in Objekte speichert und mir daraus dann ein enues XML erstellt.

Am Anfang habe ich immer die Exception bekommen:
Java:
java.io.FileNotFoundException: C:\Users\*\Documents\Export_MIO\Tool\mt-project_with_ip.dtd (Das System kann die angegebene Datei nicht finden)
        at java.io.FileInputStream.open(Native Method)
        at java.io.FileInputStream.<init>(Unknown Source)
        at java.io.FileInputStream.<init>(Unknown Source)
        at sun.net.www.protocol.file.FileURLConnection.connect(Unknown Source)
        at sun.net.www.protocol.file.FileURLConnection.getInputStream(Unknown Source)
        at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.setupCurrentEntity(Unknown Source)
        at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.startEntity(Unknown Source)
        at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.startDTDEntity(Unknown Source)
        at com.sun.org.apache.xerces.internal.impl.XMLDTDScannerImpl.setInputSource(Unknown Source)
        at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$DTDDriver.dispatch(Unknown Source)
        at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$DTDDriver.next(Unknown Source)
        at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(Unknown Source)
        at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(Unknown Source)
        at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
        at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
        at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
        at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown Source)
        at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(Unknown Source)
        at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(Unknown Source)
        at javax.xml.parsers.DocumentBuilder.parse(Unknown Source)
        at bt.mio.ReadXml.<init>(ReadXml.java:41)
        at bt.mio.ModifyXMLFile.readXmlAndAddIoUnit(ModifyXMLFile.java:85)
        at bt.mio.ModifyXMLFile.modifyAndWriteXml(ModifyXMLFile.java:55)
        at bt.mio.gui.Window.startComparison(Window.java:113)
        at bt.mio.gui.Window.createWindow(Window.java:88)
        at bt.mio.Start.main(Start.java:16)

Dieses Problem konnte ich lösen, indem ich die Datei "mt-project_with_ip.dtd" einfach dem Java Projekt hinzugefügt habe.


Jedoch wollte ich jetzt mein Programm (was in Eclipse ohne Probleme funktioniert) in eine *jar oder ausführbare *jar exportieren, jedoch exportiert er mir nicht diese "mt-project_with_ip.dtd" Datei und ich kriege wieder diese Exception.

Wie kann ich diese "mt-project_with_ip.dtd" Datei mit exportieren? Ebenfalls habe ich auch eine Dokumentation geschrieben, die ich auch gern aus Eclipse exportieren würde, jedoch auch das klappt nicht.

ICh habe google schon gefragt, aber keine Lösung gefunden.

Versucht habe ich:
  • im Java Projekt builpath konfigurieren
  • Plugin Projekt erstellt und Code rein kopiert, build.properties konfiguriert
  • getClass().getResourceAsStream("mt-project_with_ip.dtd");

Nichts hat funktioniert, ich kriege immer wieder diese Exception.
Ich benötige dringend Hilfe!

KAnn ich überhaupt Datein, die nichts mit dem Code zu tun haben, in einem Java- Projekt exportieren? Oder benötige ich immer ein Plugin-Projekt, damit ich eine MAIFEST besitze?
Was ist genau der Unterscheid der beiden, bzw. wann nutzt man welches Projekt?
 
Hey,

du kannst die meisten Dinge rund um Manifeste und Resourcen umgehen, indem du Projektmanagement software wie zum Beispiel Maven benutzt. Soviel ich weiß bietet Eclipse eine Integration für Maven, wenn auch nur eingeschränkt und teils umständlich.
Maven "Exportiert" deine resources mit und sie befinden sich dann in der jar. Eine "Executable" Version kannst du dann erzeugen indem du die Hauptklasse deines Projektes mittels maven-jar-plugin in deine MANIFEST schreiben lässt.

Sobald die Datei in deiner jar ist dürftest du sie mittels
Code:
getClass().getResourceAsStream("mt-project_with_ip.dtd");
laden können.

Um deine Kernfrage zu beantworten:

KAnn ich überhaupt Datein, die nichts mit dem Code zu tun haben, in einem Java- Projekt exportieren? Oder benötige ich immer ein Plugin-Projekt, damit ich eine MAIFEST besitze?
Was ist genau der Unterscheid der beiden, bzw. wann nutzt man welches Projekt?

Ja du kannst sie exportieren, jedoch nicht so einfach wie du das anscheinend gerne hättest 😉

Mit freundlichen Grüßen
Sasuke
 
Also ich habe das ganze jetzt anders gelöst, weil ich nicht für mein Programm ein extra MAven Projekt benötige, bzw. das jetzt zu viel arbeit gewesen wäre.
ICh habe einfach das ganze als zip exportiert und dann darin die ausführende *.jar Datei exportiert und jetzt funktioniert es.🙂😀
 

Zurück
Oben