it-swarm.com.de

Wie kann ich externes Glas in mein Netbeans-Projekt einfügen

Wenn ich "clean and build" starte, wird die erstellte .jar-Datei nur ausgeführt, wenn sich der lib-Ordner im selben Ordner der .jar-Datei befindet. 

Wenn ich also die JAR-Datei auf den Desktop verschiebe und den Ordner lib im Ordner dist belasse, gibt die JAR-Datei eine Ausnahme aus.

Wie kann ich mit diesem Problem umgehen?

23
ksm001

Wenn Sie Ihre Jars in das Quellcode-Verzeichnis kopieren, befinden sie sich in Ihrem endgültigen Jar. Ich bin mir jedoch nicht sicher, ob dies zu 100% funktionieren wird. 

Es gibt einen tollen Beitrag im Java-Forum , der Folgendes angibt:

Abgesehen von einigen wenigen Umständen ist es am besten Einfach die Dateien manuell zusammenführen. Ein .jar ist im Grunde ein .Zip mit organisierte Inhalte, und Sie können sie in fast jedem ZIP-fähigen .__ öffnen. Archivprogramm (ich verwende einfach den Standard-Archivierer von gnome, File Roller, und es funktioniert super). Sichern Sie Ihre JAR-Datei und öffnen Sie sie im Archivierer Ihrer Wahl, und tun Sie dasselbe für jeden Bibliotheksbehälter in der Bibliothek Verzeichnis. Ziehen Sie die Arbeitsordner (IE, alles außer dem META-INF-Verzeichnis) aus allen Bibliotheken in den jar-Stammpfad (neben Ihrem META-INF und dem Root-Paket Ihrer App). Ziehen Sie nun die META-INF/MANIFEST.MF-Datei von Ihrem jar auf Ihren Desktop oder eine andere Mappe. Öffnen Sie es und löschen Sie die Zeilen Class-Path und X-COMMENT. Nicht Vergiss nicht, am Ende der Datei einen leeren Zeilenumbruch zu hinterlassen! Speichern Sie das neue Manifestdatei und ziehen Sie es zurück in das META-INF-Verzeichnis Ihres jar-Verzeichnisses den alten überschreiben. Testen Sie das Glas.

13
rlinden

Ich habe dieses Problem gelöst, indem ich nur eine JAR-Datei mit allen Bibliotheken darin erstellt und der build.xml-Datei in NetBeans Folgendes hinzugefügt habe:

<target name="-post-jar">
  <jar jarfile="dist/Combined-dist.jar">
    <zipfileset src="${dist.jar}" excludes="META-INF/*" />
    <zipfileset src="lib/commons-io-1.4.jar" excludes="META-INF/*" />
    <zipfileset src="lib/ninja-utils-3.2.jar" excludes="META-INF/*" />
    <zipfileset src="lib/Unicorn-1.0.jar" excludes="META-INF/*" />
    <manifest>
        <attribute name="Main-Class" value="com.example.mypackage.Main"/>
    </manifest>
  </jar>
</target>

Dadurch wird eine JAR-Datei (Combined-dist.jar) erstellt, die die Kombination aus dist jar und den angegebenen Bibliotheksdosen (in diesem Fall commons-io-1.4.jar, ninja-utils-3.2.jar und Unicorn-1.0) ist. Krug). Sie müssen sicher sein, dass Sie Ihr Hauptklassenpaket für die neue JAR-Datei angeben. Andernfalls wird es nicht ausgeführt, wenn Sie versuchen, es zu öffnen.

23
Hemerson Varela

Es ist wirklich einfach, jede abhängige Bibliothek (* .jar) in ein einziges myProject.jar zu packen.

Folgen Sie einfach diesen Schritten und Sie werden schließlich jede abhängige Bibliothek in ein einzelnes Glas packen. Wenn Sie NetBeans verwenden, können Sie genau folgen, oder Sie müssen Ihre build.xml -Datei in den Projektdateien finden.

Befolgen Sie diese Schritte, um build.xml zu bearbeiten

1) Klicken Sie in NetBeans auf der linken Seite des Projektfensters auf Files tab.

2) Doppelklicken Sie auf die Datei build.xml und fügen Sie diese Zeilen unmittelbar vor der Zeile </project> hinzu

 <target name="package-for-store" depends="jar">
    <property name="store.jar.name" value="myProject"/>
    <property name="store.dir" value="store"/>
    <property name="store.jar" value="${store.dir}/${store.jar.name}.jar"/>
    <echo message="Packaging ${application.title} into a single JAR at ${store.jar}"/>
    <delete dir="${store.dir}"/>
    <mkdir dir="${store.dir}"/>
    <jar destfile="${store.dir}/temp_final.jar" filesetmanifest="skip">
        <zipgroupfileset dir="dist" includes="*.jar"/>
        <zipgroupfileset dir="dist/lib" includes="*.jar"/>
        <manifest>
            <attribute name="Main-Class" value="${main.class}"/>
        </manifest>
    </jar>
    <Zip destfile="${store.jar}">
        <zipfileset src="${store.dir}/temp_final.jar"
        excludes="META-INF/*.SF, META-INF/*.DSA, META-INF/*.RSA"/>
    </Zip>
    <delete file="${store.dir}/temp_final.jar"/>
</target>

3) Ändern Sie value in der zweiten Codezeile entsprechend Ihrem Projektnamen

<property name="store.jar.name" value="myProject"/> //<---Just value not name

4) Speichern Sie es und klicken Sie mit der rechten Maustaste auf build.xml und wählen Sie Run Target und dann Other Targets und klicken Sie schließlich auf Package-for-Store .

5) Und hier hast du getan. Jetzt können Sie genau wie im dist-Ordner nachsehen, ob es einen store-Ordner gibt, der Ihre endgültige vollständige JAR-Datei einschließlich aller abhängigen Bibliotheken enthält. Wenn Sie jetzt weitere Bibliotheken ändern oder hinzufügen möchten, führen Sie Schritt 4 aus.

Bild für Schritt 4

enter image description here

7

Sie können Apache Ant seit Version 1.7 verwenden, um die JAR mit den erforderlichen Bibliotheken in nur einer Datei zu erstellen. Sie könnten eine Konfigurationsdatei wie folgt haben:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<project default="buildJar">
    <target name="buildJar">
        <!-- Name of jar -->
        <jar destfile="C:/MyJar.jar" filesetmanifest="mergewithoutmain">
            <manifest>
                <!-- Your class with the main method -->
                <attribute name="Main-Class" value="myPackage.MyClass"/>
                <!-- Path in the jar -->
                <attribute name="Class-Path" value="."/>
            </manifest>
            <!-- Dir of compiled class -->
            <fileset dir="C:/NetBeansProjects/MyProject/bin"/>
            <!-- Include required jars -->
            <zipfileset excludes="META-INF/*.SF" 
                src="C:/NetBeansProjects/MyProject/lib/library1.jar"/>
            <zipfileset excludes="META-INF/*.SF" 
                src="C:/NetBeansProjects/MyProject/lib/library2.jar"/>
        </jar>
    </target>
</project>

Platzieren Sie in Netbeans die XML-Datei in Ihrem Projekt und führen Sie sie mit dem Kontextmenü aus.

Weitere Informationen finden Sie im Apache Ant-Benutzerhandbuch .

5
Paul Vargas

Wenn Sie Ihre App auf einem anderen PC verteilen möchten

Sie müssen nur die JAR-Datei zusammen mit dem lib-Ordner. 

Wenn Sie Ihre App an einem beliebigen Ort auf Ihrem PC ausführen möchten

Berücksichtigen Sie dabei den Weg von Maven - erstellen Sie ein lokales Repository, z. C:\libs, wo Ihre Bibliotheken existieren würden und .jar könnte später von jedem Ort Ihres PCs darauf zugreifen. 

Oder du könntest einfach Maven benutzen. Es gibt eine Diskussion zum Verteilen von Anwendungen mit allen Abhängigkeiten (Bibliotheken): Java: Wie erstelle ich eigenständige Verteilungen von Maven-basierten Projekten? .

3
JMelnik

Kopieren Sie diese JAR-Datei nach:

C:\Programme\Java\jdk\jre\lib\ext 

und

C:\Programme\Java\jre\lib\ext

Sie sollten es in der Lage sein, es in Netbeans und in Ihren manuellen Importen zu verwenden, genau wie bei Standardimporten. 

3
Thiyagarajan

Ich habe vielleicht die einfachste Lösung für dieses Problem gefunden hier . Sie müssen nur das nächste Code-Snippet am Ende der build.xml-Datei in Ihrem Projektordner kopieren.

<target name="-post-jar">

    <!-- Change the value to the name of the final jar without .jar -->
    <property name="store.jar.name" value="MyJarName"/>

    <!-- don't edit below this line -->
    <property name="store.dir" value="dist"/>
    <property name="temp.dir" value="temp"/>
    <property name="store.jar" value="${store.dir}/${store.jar.name}.jar"/>

    <echo message="Packaging ${application.title} into a single JAR at ${store.jar}"/>

    <delete dir="${temp.dir}"/>
    <mkdir dir="${temp.dir}"/>

    <jar destfile="${temp.dir}/temp_final.jar" filesetmanifest="skip">
        <zipgroupfileset dir="dist" includes="*.jar"/>
        <zipgroupfileset dir="dist/lib" includes="*.jar"/>

        <manifest>
            <attribute name="Main-Class" value="${main.class}"/>
        </manifest>
    </jar>

    <delete dir="${store.dir}"/>

    <Zip destfile="${store.jar}">
        <zipfileset src="${temp.dir}/temp_final.jar"
        excludes="META-INF/*.SF, META-INF/*.DSA, META-INF/*.RSA"/>
    </Zip>

    <delete dir="${temp.dir}"/>

</target>
  1. Gehen Sie zur build.xml im Stammverzeichnis Ihres Projekts und fügen Sie den Code unmittelbar vor </project> am Ende hinzu.

  2. Ändern Sie nun den Wert des ersten Eigenschaftsfelds als Kommentar und speichern Sie die Änderungen.

  3. Von nun an wird jedes Mal, wenn Sie Ihr Projekt bereinigen und erstellen, die vollständige Dose mit Abhängigkeiten im Ordner Projekt dist erzeugt

2
Deniz Celebi

die Lösung von user1016588 funktioniert für mich. Es gibt einen Tippfehler: Diese Zeile sollte .__ sein. zipfileset src = "dist/lib/commons-io-1.4.jar" 

1
Gang Su

Das hat bei mir funktioniert:

Ich habe die Excel-Exportfunktion in mein Projekt eingebaut. Die 2 externen .jars, die ich für diesen Zweck verwendete, waren jxl.jar end sx.jar 

Entpacken Sie diese 2 Gläser in einen Ordner (Java-Klassen) mit 7-Zip ohne META-Dateien. Entpacken Sie Ihren Projektbehälter in den gleichen Ordner einschließlich der META-Datei.

Packen Sie den gesamten Java-Klassenordner mit JARMaker erneut ein, um Ihre Project-JAR-Datei in ihrem ursprünglichen Distributionsordner neu zu erstellen ... und schon geht es los ... mit der vollständigen Excel-Funktionalität.

1
user2270400

Versuchen Sie Folgendes - in der Netbeans-IDE:

  1. Gehen Sie zu Extras -> Bibliotheken
  2. Klicken Sie im Dialogfeld links unten auf "Neue Bibliothek" und geben Sie einen Namen ein
  3. Klicken Sie auf der rechten Seite auf "JAR/Ordner hinzufügen". 
  4. Klicken Sie unten rechts auf OK
  5. Starten Sie die IDE erneut und überprüfen Sie sie. 
1
vfredrick

Folge diesen: - 1. Klicken Sie mit der rechten Maustaste auf das Projekt, das im Netbeans Editor geöffnet ist 2. Eigenschaften auswählen 3. Wählen Sie Bibliotheken aus 4. füge jar hinzu 5. OK klicken

0
myskons

Sie können dies auch verwenden (wenn sich die Bibliotheken nicht in "dist/lib" befinden), getestet mit NetBeans und ant-contrib:

	<target name="-post-jar">
		<taskdef resource="net/sf/antcontrib/antlib.xml">
		  <classpath>
			<!-- Path to ant-contrib -->
			<pathelement location="../../Libs/ant-contrib-1.0b3.jar"/>
		  </classpath>
		</taskdef>

		<!-- Change the value to the name of the final jar without .jar -->
		<property name="store.jar.name" value="${application.title}"/>

		<!-- don't edit below this line -->
		<property name="store.dir" value="dist"/>
		<property name="temp.dir" value="temp"/>
		<property name="temp.libs.dir" value="temp/libs"/>
		<property name="store.jar" value="${store.dir}/${store.jar.name}.jar"/>

		<echo message="Packaging ${application.title} into a single JAR at ${store.jar}"/>
		
		<fileset id="store.jars.absolute" dir="${store.dir}" includes="*.jar"/>		
		<pathconvert property="store.jars.relative" refid="store.jars.absolute" dirsep="/">
			<map from="${basedir}/" to=""/>
		</pathconvert>
		
		<for list="${store.jars.relative}" param="item">
			<sequential>
				<echo message="Adding @{item} into single JAR at ${store.jar}"/>
			</sequential>
		</for>

		<delete dir="${temp.dir}"/>
		<mkdir dir="${temp.dir}"/>
		
		<for list="${javac.classpath}" param="item" delimiter=":">
			<sequential>
				<echo message="Adding @{item} into single JAR at ${store.jar}"/>
				<copy file="@{item}" todir="${temp.libs.dir}" overwrite="true" />
			</sequential>
		</for>

		<jar destfile="${temp.dir}/temp_final.jar" filesetmanifest="skip">
			<zipgroupfileset dir="${store.dir}" includes="*.jar"/>
			<zipgroupfileset dir="${temp.libs.dir}" includes="*.*"/>

			<manifest>
				<attribute name="Main-Class" value="${main.class}"/>
			</manifest>
		</jar>

		<delete dir="${store.dir}"/>

		<Zip destfile="${store.jar}">
			<zipfileset src="${temp.dir}/temp_final.jar" excludes="META-INF/*.SF, META-INF/*.DSA, META-INF/*.RSA"/>
		</Zip>

		<delete dir="${temp.dir}"/>

	</target>

0
user2830808