Czytałem tak wiele artykułów/wyjaśnień na ten temat i spędziłem zbyt wiele godzin, ale wszystko jest albo zbyt szerokie, albo konkretne.Jak połączyć wiele słoików w jeden?
To pytanie dotyczy tylko apletu, który zrobiłem. Zawiera jedną klasę i wymaga 2 innych bibliotek JAR. Zawarłem je w projektach (wiele projektów, ponieważ próbowałem tego w Netbeans i Eclipse ... łatwo jest odtworzyć projekt jednej klasy). Chodzi o to, że mój projekt HTML/web nie powinien zajmować się więcej niż jednym słoikiem lub odnosić się do nich. To wcale nie jest skomplikowany aplet/projekt.
Pierwotnie zrobiłem to w Netbeans. Ma pakiet główny, a po dodaniu 2 JARów jest umieszczany w obszarze "Biblioteki" (folder "zasoby"). Po zbudowaniu Netbeans tworzy Jar dla mojego jednego pakietu/klasy, a następnie umieszcza 2 inne biblioteki w katalogu "lib" obok. Chciałbym, żeby byli w jednym, nadającym się do dystrybucji Jar. Z wielu rzeczy, które przeglądałem, próbowałem umieścić w build.xml:
<target name="YourBigJar" depends="-post-jar">
<jar destfile="dist/BigJar.jar">
<zipfileset src="dist/cxapplet.jar"/>
<zipfileset src="resources/dpotapi.jar"/>
<zipfileset src="resources/dpotjni.jar"/>
</jar>
</target>
Ale nic nie produkuje. Mam to od NetBeans - deploying all in one jar. Nie wiem/nie rozumiem, jak używać build.xml, więc nie byłbym zaskoczony, gdyby coś poszło nie tak (oczywiście), ale nie otrzymuję komunikatów o błędach/ostrzeżeniach.
Kiedy zrobiłem to w Eclipse, to skutecznie je łączy, ale kiedy używam Słoika w moim rzeczywistym projekcie sieciowym, mówi, że nie może znaleźć klas z pozostałych 2 Słoików. Nie rozumiem, jak to naprawić, ale czy jest to problem z Classpath? W Eclipse tworzę nowy katalog o nazwie "lib" i umieszczam w nim Jarsa. Następnie klikam prawym przyciskiem myszy projekt, przechodzę do "Ścieżki budowania Java" i dodajemy słoiki, sprawdzając je także w zakładce "Zamawianie i eksportowanie". Z rzeczy, które przeczytałem, klikam prawym przyciskiem myszy projekt, wybieram "Eksportuj", wybieram "Jar", odznaczam pliki ".classpath" i ".project", sprawdzam tylko "Eksportuj wygenerowane pliki klas i zasoby", a następnie pozwól mu wygenerować plik manifestu. Tak jak powiedziałem, generuje jeden słoik, ale jego zawartość to mój pakiet, a następnie katalog "lib" zawierający 2 inne słoiki. Manifest jest tam, ale jest całkiem pusty i nie odwołuje się do żadnych plików (nie jestem pewien, czy to ważne). Kiedy umieściłem to w mojej aplikacji internetowej, oznacza to, że aplet nie może znaleźć innych klas.
To po prostu wydaje się takie proste - jeden pakiet/klasa, dwa zewnętrzne Jars ... łączą się w jeden Jar, gdy są budowane do dystrybucji jako aplet. Jakieś pomysły?
UPDATE:
Ponieważ zaczęliśmy używać Maven, ktoś spojrzał za pomocą wtyczki Maven. Więc skończyło się tworząc nowy projekt domu apletu (ponieważ jest on używany w wielu projektach), a używane to w naszym pom.xml
, w końcu:
<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>
I to było dobre, bo to pozwoliło nam wykorzystać nasze Certyfikat podpisywania kodu, aby automatycznie go podpisać.
* "Chodzi o to, że mój projekt HTML/web nie powinien zajmować się więcej niż jednym Jar" * Jest to banalne, aby przeglądarka mogła sobie z tym poradzić. * "Jakieś pomysły?" * Rozmieść słoiki w zwykły sposób (który ma przewagę nad aktualną strategią) i oszczędzaj czas. –
Lepiej jest uzależniać jeden słoik od drugiego. Wiele narzędzi do tworzenia słoików ułatwia pracę. –
@joeyrohan Nie jestem pewien co masz na myśli, ale właśnie dlatego próbuję użyć narzędzi do budowania Netbeans i Eclipse, które, jak sądziłem, by to zrobiły, aby to osiągnąć. – Ian