web-dev-qa-db-ja.com

複数の瓶を1つに組み合わせる方法は?

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

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

もともと、Netbeansで作成しました。メインパッケージがあり、2つのJarを追加した後、それらは「Libraries」領域(「resources」フォルダー)に配置されます。ビルド後、Netbeansは1つのパッケージ/クラス用のJarを作成し、他の2つのライブラリをその隣の「lib」ディレクトリに配置します。私はそれらを1つの配布可能な瓶に入れてほしい。私が調べた多くのことから、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」という新しいディレクトリを作成し、その中にJarsを配置します。次に、プロジェクトを右クリックして[Javaビルドパス]に移動し、Jarを追加して、[注文とエクスポート]タブで確認します。読んだ内容から、プロジェクトを右クリックして[エクスポート]を選択し、[Jar]を選択して、[。classpath]ファイルと[.project]ファイルのチェックを外し、[生成されたクラスファイルとリソースのエクスポート]のみをオンにしてから、マニフェストファイルの生成を許可します。私が言ったように、これは1つのJarを生成しますが、その内容は私のパッケージであり、次に2つの他のJarを持つ「lib」ディレクトリです。マニフェストはありますが、かなり空で、ファイルを参照していません(それが重要かどうかはわかりません)。 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>

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

11
Ian

まず、jarを組み合わせる理由は実際にはありません。クラスファイル(jarではなく)とその個別の依存jarを使用してアプレットをデプロイできます。

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

Jarファイルを別のjarファイルに入れることはできませんが、jarファイルはそのようには機能しません。必要なのは、すべてのjarファイルのすべての内容を抽出してから、再び1つのjarに圧縮することです。

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

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

4
GreyBeardedGeek