Ich habe so viele Artikel/Erklärungen dazu gelesen und zu viele Stunden verbracht, aber alles ist entweder zu breit oder spezifisch.Wie mehrere Gläser zu einem kombinieren?
Diese Frage gilt nur für ein Applet, das ich gemacht habe. Es enthält eine Klasse und benötigt 2 andere Jar-Bibliotheken. Ich habe diese in die Projekte aufgenommen (mehrere Projekte, weil ich dies in Netbeans und Eclipse versucht habe ... es ist einfach ein Einklassenprojekt neu zu erstellen). Der Sinn von all dem ist, dass mein HTML/Web-Projekt nicht mehr als ein Jar verarbeiten oder auf sie verweisen muss. Es ist auch kein kompliziertes Applet/Projekt.
Ursprünglich habe ich es in Netbeans gemacht. Es hat das Hauptpaket und nach dem Hinzufügen der 2 Jars werden sie in einen "Libraries" -Bereich (den "Resources" -Ordner) gelegt. Nach dem Erstellen erstellt Netbeans ein Jar für mein einzelnes Paket/eine Klasse und stellt dann die 2 anderen Bibliotheken in ein "lib" -Verzeichnis daneben. Ich möchte, dass sie in einem verteilbaren Jar sind. Von den vielen Dingen, die ich durchgeschaut habe, habe ich versucht, folgendes in build.xml zu setzen:
Aber es produziert nichts. Ich habe das von NetBeans - deploying all in one jar. Ich weiß nicht, wie man build.xml benutzt, also wäre ich nicht überrascht, wenn etwas (natürlich) schief läuft, aber ich bekomme keine Fehler-/Warnmeldungen.
Wenn ich es in Eclipse gemacht habe, kombiniert es sie effektiv, aber wenn ich das Glas in meinem tatsächlichen Webprojekt verwende, sagt es, dass es die Klassen von den anderen 2 Gläsern nicht finden kann. Ich würde nicht verstehen, wie ich es beheben kann, aber ist es ein Classpath-Problem? In Eclipse mache ich ein neues Verzeichnis namens "lib" und setze die Jars darin. Dann klicke ich mit der rechten Maustaste auf das Projekt, gehe zu "Java Build Path" und füge die Jars hinzu und überprüfe sie auf der Registerkarte "Order and Export". Nach den Dingen, die ich gelesen habe, klicke ich mit der rechten Maustaste auf das Projekt, wähle "Exportieren", wähle "Jar", deaktiviere die ".classpath" und ".project" Dateien, nur "Exportiere generierte Klassendateien und Ressourcen" und dann Erlaube es, die Manifest-Datei zu generieren. Wie ich schon sagte, erzeugt dies ein Jar, aber sein Inhalt ist mein Paket und dann ein "lib" Verzeichnis, das die 2 anderen Jars hat. Das Manifest ist da, aber es ist ziemlich leer und referenziert keine Dateien (nicht sicher, ob das wichtig ist). Wenn ich es in meine Web-App lege, heißt es, dass das Applet die anderen Klassen nicht finden kann.
Es scheint nur so einfach - ein Paket/Klasse, zwei externe Jars ... zu einem Jar kombinieren, wenn für die Verteilung als Applet gebaut. Irgendwelche Ideen?
UPDATE:
Da wir Maven begann, sah jemand in ein Maven Plugin. So landeten wir ein neues Projekt anlegen auf das Applet Hause (da es über mehrere Projekte verwendet wird), und verwenden diese in unseren pom.xml
, am Ende:
<build>
<resources>
<resource>
<directory>${basedir}/applet</directory>
<excludes>
<exclude>codesignstore</exclude>
</excludes>
</resource>
<resource>
<directory>${basedir}/src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.2-beta-5</version>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<finalName>cxapplet</finalName>
<archive>
<index>true</index>
<manifest>
<addDefaultImplementationEntries>true</addDefaultImplementationEntries>
</manifest>
</archive>
<appendAssemblyId>false</appendAssemblyId>
</configuration>
<executions>
<execution>
<id>make-my-applet-jar</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jarsigner-plugin</artifactId>
<version>1.2</version>
<executions>
<execution>
<id>sign</id>
<goals>
<goal>sign</goal>
</goals>
</execution>
</executions>
<configuration>
<keystore>${basedir}/applet/codesignstore</keystore>
<alias>codesigncert</alias>
<storepass>HIDDEN</storepass>
<keypass>HIDDEN</keypass>
</configuration>
</plugin>
</plugins>
</build>
Und es war schön, weil es uns erlaubt, unsere zu nutzen Code Signing Certificate, um es auch automatisch zu signieren.
* "Der Punkt von allem ist, dass mein HTML/Web-Projekt nicht mit mehr als einem Jar umgehen muss" * Es ist trivial, es so zu machen, dass der Browser damit umgehen kann. * "Irgendwelche Ideen?" * Stellen Sie die Jars auf die übliche Weise bereit (das hat Vorteile gegenüber Ihrer aktuellen Strategie) und sparen Sie sich Zeit. –
Es ist besser, Abhängigkeiten von einem Glas zu einem anderen zu machen.Viele Glas machen Werkzeuge macht Ihre Arbeit einfach. –
@joeyrohan Ich bin mir nicht sicher, was du meinst, aber deshalb versuche ich, Netbeans 'und Eclipse's Build-Tools zu verwenden, was ich dazu beitragen würde. – Ian