12

これについて非常に多くの記事や説明を読み、多くの時間を費やしましたが、すべてが広範すぎるか具体的すぎます。

この質問は、私が作成したアプレットにのみ当てはまります。これには 1 つのクラスが含まれ、他に 2 つの Jar ライブラリが必要です。これらをプロジェクトに含めました (Netbeans と Eclipse でこれを試したので、複数のプロジェクト... 1 つのクラス プロジェクトを簡単に再作成できます)。このすべてのポイントは、私の HTML/web プロジェクトが複数の Jar を処理したり、それらを参照したりする必要がないということです。複雑なアプレット/プロジェクトでもありません。

もともと、Netbeans で作成しました。メインパッケージがあり、2 つの Jar を追加した後、「ライブラリ」エリア (「リソース」フォルダー) に配置されます。ビルド後、Netbeans は 1 つのパッケージ/クラス用の Jar を作成し、他の 2 つのライブラリをその隣の「lib」ディレクトリに配置します。それらを 1 つの配布可能な 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 から入手しました - すべてを 1 つの jar にデプロイします。私は build.xml の使用方法を知らない/理解していないので、(明らかに) 何か問題が発生しても驚かないでしょうが、エラー/警告メッセージは表示されません。

Eclipse で作成すると効果的に結合されますが、実際の Web プロジェクトで Jar を使用すると、他の 2 つの Jar のクラスが見つからないと表示されます。修正方法がわかりませんが、クラスパスの問題ですか? Eclipse で「lib」という新しいディレクトリを作成し、その中に Jar を入れます。次に、プロジェクトを右クリックし、[Java Build Path] に移動して Jar を追加し、[Order and Export] タブでそれらを確認します。私が読んだことから、プロジェクトを右クリックし、「エクスポート」を選択し、「Jar」を選択し、「.classpath」および「.project」ファイルのチェックを外し、「生成されたクラスファイルとリソースをエクスポートする」のみをチェックしてから、マニフェスト ファイルの生成を許可します。私が言ったように、これは1つのJarを生成しますが、その内容は私のパッケージであり、次に「lib」です 他の 2 つの Jar があるディレクトリ。マニフェストはそこにありますが、かなり空で、ファイルを参照していません (それが重要かどうかはわかりません)。それを Web アプリに入れると、アプレットが他のクラスを見つけられないと表示されます。

とてもシンプルに見えます - 1 つのパッケージ/クラス、2 つの外部 Jar... アプレットとして配布用にビルドすると、1 つの 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>

また、コード署名証明書を使用して自動的に署名することもできたので良かったです。

4

2 に答える 2

4

まず最初に、jar を結合する理由はまったくないと言っておきましょう。クラス ファイル (jar ではなく) とそれに依存する個別の jar を使用してアプレットをデプロイできます。

ただし、クラスとそのすべての依存関係から 1 つの大きな jar を作成する必要があると思われる場合は、そうすることができます。

ただし、jar ファイルを別の jar ファイルに入れることはできません。jar ファイルはそのようには機能しません。必要なのは、すべての jar ファイルのすべてのコンテンツを抽出し、1 つの jar ファイルに再度圧縮することです。

これを行う場合は、 Mavenビルド ツールを使用することをお勧めします。Maven でビルドをセットアップしたら、Maven アセンブリ プラグインを構成して1 つの大きな jar をビルドできます。

私は Eclipse が Maven をサポートしていることを知っており、NetBeans も同様にサポートしていると思います。

于 2013-01-16T03:05:36.717 に答える
-1

bin ディレクトリのベースから、次のことを試してみませんか。

jar.exe -cvf cxapplet.jar *

外部 jar ファイルをディレクトリ内の適切な場所に配置し、外部 jar ファイルをbin使用してクラス ファイルを手動で jar します。

または、詳細情報を提供する可能性のあるこのスレッドを参照してください。

于 2013-01-16T02:24:38.363 に答える