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



## ProgrammierFee (11. Sep 2017)

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.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?


----------



## Sasuke (11. Sep 2017)

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 

```
getClass().getResourceAsStream("mt-project_with_ip.dtd");
```
laden können.

Um deine Kernfrage zu beantworten:



ProgrammierFee hat gesagt.:


> 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


----------



## ProgrammierFee (12. Sep 2017)

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.


----------

