Wie das hinzufügen von Ressourcen zu classpath
Wie fügen Sie einen Ordner (z.B. eine Ressource Ordner mit Kunst) zu den classpath ein netbeans-Projekt? Ich schaffte es zu tun manuell über die Bearbeitung der NB erzeugten jar-Datei des Projekts (das ist Ihr MANIFEST.MF-Datei + kopieren Sie die Ressourcen manuell), aber es sollte ein Weg, zu sagen, netbeans, aber auch in den Sinn, die Ressourcen, nicht?
Die Ordner Struktur sieht wie folgt aus:
/project/art/
/project/dist/lib/
/project/dist/art/
/project/dist/project.jar
/project/lib/
/project/src/
Ich nicht wollen, Verpacken Sie die Kunst in der jar, weil ich möchte die Kunst an sich leicht austauschbar. Wenn ich den clipart-Ordner in den src-Ordner dann NB kompiliert in Ordnung, aber die art Ressourcen am Ende in das Glas.
Hinzufügen den clipart-Ordner auf der netbeans-Projekt-Bibliotheken (Eigenschaften -> Bibliotheken -> Add JAR/Folder) schien nicht zu funktionieren, weil ich dann am Ende mit einer Fehlermeldung " ...\Projekt\Kunst ist ein Verzeichnis, oder kann nicht gelesen werden. Nicht kopieren der Bibliotheken.', was wiederum verhindert, dass auch die echten Ordner "libraries" kopiert werden.
Irgendwelche Ideen?
Beste Grüße
Chris
2 Beobachtungen gemacht, basierend auf die Kommentare von gpeche:
a) Eher die Angabe der zusätzlichen Mittel, die Ordner in die "Run" - tab als in der "Compile" - tab des Projekt-Eigenschaften -> Bibliotheken scheint nicht zu einen großen Unterschied machen Sie in Netbeans (ich bin derzeit mit 6.9.1). Die Ausgabe (und damit Fehler) bleibt der gleiche, das ist nichts kopiert wird:
Created dir: C:\Users\Chrisi\Desktop\vocabulary\VocabularyTrainer\dist
C:\Users\Chrisi\Desktop\vocabulary\VocabularyTrainer\art is a directory or can't be read. Not copying the libraries.
Not copying the libraries.
Building jar: C:\Users\Chrisi\Desktop\vocabulary\VocabularyTrainer\dist\VocabularyTrainer.jar
Ein weiterer interessanter Aspekt ist, dass im Hilfe-Menü der Bibliotheken-panel nichts explizit erwähnt, bezüglich der Ordner als Bibliotheken. Könnte es möglich sein, dass der button in Netbeans ist falsch benannt, das ist nur echte jar ' s sind erlaubt?
b) Hinzufügen der Ressourcen-Ordner zu den Bibliotheken, die Liste hat das Auswirkungen, wenn man einen weiteren Eintrag hinzufügen, um das MANIFEST.MF. Während - und das ist das kleinere Problem - die classpath-Eintrag scheint zu sein, immer in der Erwartung, den resource-Ordner, um einen Unterordner des library-Ordners (z.B. "lib/Kunst"), das große problem ist, dass es scheint zu sein, ein slash fehlt.
Wie bereits erwähnt die NB erzeugt Eintrag im MANIFEST.MF wird wie folgt Aussehen "lib/Kunst" (was bei mir nicht funktioniert), während (manuell gesetzt) "lib/Kunst/"?!
Die Art, wie ich die Ressourcen aus dem Ordner ist so etwas wie dieses:
URL resource = getClass().getResource("/gui/refresh.png");
ImageIcon tmp = new ImageIcon(resource);
Edit:
Basierend auf Tushars Kommentar und dieses posting ich die folgende Lösung gefunden werden, die einen akzeptablen Kompromiss zwischen Funktionalität und Komfort.
Ich überschreiben Sie das ANT-target aus dem auto-generiert 'build-impl.xml' Datei wird erstellt, und der Class-Path in der MANIFEST.MF-Datei im basic 'build.xml' Datei von der Netbeans-Projekt. Der code der geht an die 'build.xml' Datei sieht wie folgt aus:
<property name="art.classpath" value="art/" />
<target name="-post-jar">
<mkdir dir="${dist.dir}/art"/>
<copy todir="${dist.dir}/art">
<fileset dir="${basedir}/art">
<!-- <exclude name="**/!source/**"/> if you want to exclude something... -->
</fileset>
</copy>
</target>
<target name="-init-macrodef-copylibs">
<macrodef name="copylibs" uri="http://www.netbeans.org/ns/j2se-project/3">
<element name="customize" optional="true"/>
<sequential>
<property location="${build.classes.dir}" name="build.classes.dir.resolved"/>
<pathconvert property="run.classpath.without.build.classes.dir">
<path path="${run.classpath}"/>
<map from="${build.classes.dir.resolved}" to=""/>
</pathconvert>
<pathconvert pathsep=" " property="jar.classpath">
<path path="${run.classpath.without.build.classes.dir}"/>
<chainedmapper>
<flattenmapper/>
<globmapper from="*" to="lib/*"/>
</chainedmapper>
</pathconvert>
<taskdef classname="org.netbeans.modules.java.j2seproject.copylibstask.CopyLibs" classpath="${libs.CopyLibs.classpath}" name="copylibs"/>
<copylibs compress="${jar.compress}" index="${jar.index}" jarfile="${dist.jar}" manifest="${manifest.file}" runtimeclasspath="${run.classpath.without.build.classes.dir}">
<fileset dir="${build.classes.dir}"/>
<manifest>
<attribute name="Class-Path" value="${jar.classpath} ${art.classpath}"/>
<customize/>
</manifest>
</copylibs>
</sequential>
</macrodef>
</target>
Der Nachteil ist, dass für die Entwicklung in Netbeans habe ich noch die Ressource-Ordner (z.B. 'Kunst') zu den Bibliotheken, die Liste zu machen, das Projekt in Netbeans. Dadurch wird ein zusätzlicher Eintrag in der MANIFEST.MF-Datei ('lib/Kunst'), zusammen mit der Wirkung, dass die Bibliotheken werden nicht automatisch kopiert, um den "dist" Ordner, mit der Meldung
...\art is a directory or can't be read. Not copying the libraries.
Not copying the libraries.
Diese behavor ist - afaik - bestimmt (Kraft, alles gebündelt in einem Glas), obwohl es Diskussionen darüber gehen weiter. Um eine echte Verteilung bundle würd ich nehmen entfernt die Ressource(N) Ordner aus der library-Liste in NB und neu erstellen.
Ideen zu einem strafferen setup ohne Kompromisse sind natürlich immer noch willkommen. 🙂
InformationsquelleAutor der Frage ChristianS | 2010-09-15
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hinzufügen von Ressource-Ordner zu classpath:
Wenn Sie die Clean-&-Erstellen eines NetBeans Ant-Basierte Projekte, die es erstellt ein manifest.mf-Datei in das root-Verzeichnis des Projekts. Diese Datei bekommt, enthalten in der JAR-Datei auch. Ändern Sie diese Datei und fügen Sie den Eintrag wie folgt:
Schrägstrich ist wichtig, dass nach Kunst in den class-path.
Einschließlich der arts resource Ordner in der Verteilung
Entweder kopieren Sie diesen Ordner in den dist-Ordner nach dem erstellen oder fügen Sie ein ANT-target kopiert die benötigten Ressourcen in den dist-Ordner.
Fügen Sie das Ziel wie folgt in die build.xml Datei:
Code für den Zugriff auf diese Ressourcen:
Den code, der benötigt wird, um den Zugriff auf diese Ressource-Dateien muss wie folgt Aussehen: (Dies funktioniert nicht in der design-Zeit, aber sicher aus der JAR-Datei)
HINWEIS: Die Dateien manifest.mf und build.xml befindet sich im root-Verzeichnis des Projekts zugänglich sind, aus dem Dateien-Bedienfeld in der NetBeans IDE
InformationsquelleAutor der Antwort
Mit NetBeans 8.0.2:
Den Ressourcen, die dem Projekt Hinzugefügt werden.
Sehen Sie das Verzeichnis Hinzugefügt, die in Ihrem Navigationsbereich sowie
In das andere Projekt, die Ressourcen sind nun verfügbar. Zum Beispiel, zu Lesen, ein Bild:
InformationsquelleAutor der Antwort Squiggler
Um die zu entfernen lib/Kunst aus Class-Pfad und nicht "ist ein Verzeichnis, oder kann nicht gelesen werden" müssen löschen lib/art von Pfad:
InformationsquelleAutor der Antwort eml