Как объединить несколько банок в один?
Я прочитал так много статей / объяснений по этому поводу и провел слишком много часов, но все это слишком широко или конкретно.
Этот вопрос действительно относится только к Апплету, который я сделал. Он содержит один класс и требует 2 другие библиотеки Jar. Я включил их в проекты (несколько проектов, потому что я пробовал это в Netbeans и Eclipse ... легко создать проект одного класса). Суть всего этого в том, что мой HTML / веб-проект не должен иметь дело с более чем одним Jar или ссылаться на них. Это не сложный апплет / проект вообще.
Первоначально я сделал это в Netbeans. У него есть основной пакет, и после добавления двух файлов Jar они помещаются в область «Библиотеки» (папка «ресурсы»). После его создания Netbeans создает Jar для одного моего пакета / класса, а затем помещает 2 другие библиотеки в каталог «lib» рядом с ним. Я бы хотел, чтобы они были в одной распространяемой банке. Из многих вещей, которые я просмотрел, я попытался поместить в 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>
Но это ничего не дает. Я получил это отNetBeans - развертывание всего в одной банке , Я не знаю / не понимаю, как использовать build.xml, поэтому я не удивлюсь, если что-то пойдет не так (очевидно), но я не получаю сообщений об ошибках / предупреждений.
Когда я сделал это в Eclipse, он эффективно объединяет их, но когда я использую Jar в моем реальном веб-проекте, он говорит, что не может найти классы из двух других Jar. Я не понимаю, как это исправить, но это проблема Classpath? В Eclipse я создаю новый каталог с именем "lib" и помещаю в него Jar-файлы. Затем я щелкаю правой кнопкой мыши по проекту, захожу в «Путь сборки Java» и добавляю банки, также проверяя их на вкладке «Заказ и экспорт». Из того, что я прочитал, я щелкаю правой кнопкой мыши по проекту, выбираю «Экспорт», выбираю «Jar», снимаю флажок с «.classpath» и «.project», проверяю только «Экспортировать сгенерированные файлы классов и ресурсы», а затем Позвольте ему создать файл манифеста. Как я уже сказал, это генерирует один Jar, но его содержимое - это мой пакет, а затем каталог "lib", в котором есть 2 других Jar. Манифест есть, но он довольно пустой и не ссылается ни на какие файлы (не уверен, что это важно). Когда я помещаю его в свое веб-приложение, он говорит, что апплет не может найти другие классы.
Это кажется таким простым: один пакет / класс, два внешних Jar-файла ... объединяются в один Jar-файл при сборке для распространения в виде апплета. Есть идеи?
ОБНОВИТЬ:
Так как мы начали использовать Maven, кто-то изучил использование плагина Maven. Итак, мы закончили тем, что создали новый проект для размещения апплета (так как он используется в нескольких проектах), и использовали это в нашемpom.xml
, в конце:
<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>
И это было приятно, потому что это позволило нам использовать наш сертификат подписи кода, чтобы автоматически подписать его.