如何将多个罐子组合成一个



我读了很多关于这方面的文章/解释,花了很多时间,但每件事都太宽泛或太具体了。

这个问题实际上只适用于我制作的Applet。它包含一个类,并需要另外两个Jar库。我已经在项目中包含了这些(多个项目,因为我已经在Netbeans和Eclipse中尝试过了…很容易重新创建一个Class项目)。所有这一切的重点是,我的HTML/web项目不应该必须处理多个Jar或引用它们。它也不是一个复杂的applet/project。

最初,我是在Netbeans中制作的。它有主包,在添加2个jar之后,它们被放在"Libraries"区域("resources"文件夹)中。在构建它之后,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中创建它时,它有效地组合了它们,但是当我在实际的web项目中使用Jar时,它说它无法从其他2个Jar中找到类。我不明白如何修复它,但它是一个类路径问题吗?在Eclipse中,我创建了一个名为"lib"的新目录,并将jar文件放入其中。然后,我右键单击项目,转到"Java Build Path",并添加jar,同时在"Order and Export"选项卡下检查它们。从我读过的东西,我右键单击项目,选择"导出",选择"Jar",取消选中"。类路径"one_answers"。项目"文件,只勾选"导出生成的类文件和资源",然后允许它生成manifest文件。就像我说的,这会生成一个Jar,但是它的内容是我的包,然后是一个包含另外两个Jar的"lib"目录。Manifest在那里,但它非常空,没有引用任何文件(不确定这是否重要)。当我把它放到我的web应用程序中时,它说applet找不到其他类。

这看起来很简单——一个包/类,两个外部Jar…在作为applet构建分发时组合成一个Jar。什么好主意吗?

更新:

自从我们开始使用Maven,有人就开始研究使用Maven插件。所以我们最终创建了一个新项目来容纳applet(因为它在多个项目中使用),并在我们的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>

这很好,因为它允许我们使用我们的代码签名证书来自动签名

首先,让我说真的没有理由将这些jar组合在一起—您可以使用您的类文件(不在jar中)和它单独的依赖jar来部署applet。

然而,如果你觉得你必须把你的类和它所有的依赖关系做成一个大的jar,那么你可以这么做。

你不能把jar文件放到另一个jar文件中,但是- jar文件不能这样工作。您需要的是将所有jar文件的所有内容提取出来,然后再次压缩到一个jar中。

如果你打算这样做,我建议使用Maven构建工具来做。一旦你用Maven建立了你的构建,你就可以配置Maven组装插件来为你构建一个大的jar。

我知道Eclipse支持Maven,我假设NetBeans也支持。

从bin目录的底部,为什么不试试:

jar.exe -cvf cxapplet.jar *

将您的外部jar文件放在您的bin目录中的适当位置,并将您的类文件与外部jar文件手动jar。

相关内容

  • 没有找到相关文章

最新更新