我已经阅读了许多关于此问题的文章和解释,花费了太多时间,但是一切都太笼统或太具体。
这个问题实际上只适用于我制作的一个小应用程序。它包含一个类,并需要另外两个Jar库。我已经将它们包含在项目中(多个项目,因为我尝试过在Netbeans和Eclipse中进行尝试......重新创建一个单一类项目很容易)。所有这一切的目的是我的HTML/网页项目不必处理超过一个Jar文件或引用它们。这并不是一个非常复杂的小应用程序/项目。
最初,我是在Netbeans中创建的。它有主要的程序包,在添加了2个Jars之后,它们被放置在“Libraries”区域(“resources”文件夹)中。构建完成后,Netbeans会为我的一个包/类创建一个Jar文件,然后将另外两个库放在其旁边的“lib”目录中。我希望它们可以在一个可分发的Jar文件中。从我看过的许多内容中,我尝试在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 - deploying all in one jar得到了这个。我不知道/理解如何使用build.xml,所以如果出现问题(显然),我不会感到惊讶,但我没有收到错误/警告消息。
当我在Eclipse中制作它时,它有效地将它们组合在一起,但当我在我的实际Web项目中使用Jar时,它说它找不到来自其他两个Jars的类。我不明白如何修复它,但它是一个Classpath问题吗?在Eclipse中,我创建了一个名为"lib" 的新目录,并将Jars放入其中。然后,我右键单击项目,转到"Java Build Path",并添加Jars,还在"Order and Export"选项卡下检查它们。从我读过的东西来看,我右键单击项目,选择"Export",选择"Jar",取消选中".classpath "和".project "文件,只选中"Export generated class files and resources",然后允许它生成清单文件。像我说的那样,这将生成一个Jar,但其内容是我的包和一个具有另外2个Jars的 "lib" 目录。清单在那里,但它非常空,没有引用任何文件(不确定是否重要)。当我把它放在我的Web应用程序中时,它说小程序无法找到其他类。
它看起来很简单-一个包/类,两个外部Jars...在构建发布为小程序时将它们组合成一个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>
这很好,因为它允许我们使用我们的代码签名证书来自动签名。