5

Swing クライアントを jar-with-dependencies.jar ファイルとしてビルドする Maven プロジェクトがあります。Java Web Start を使用して、この my.gui-0.1.0-jar-with-dependencies.jar ファイルを配布したいと考えています。この目的のために、JNLP アーティファクトを含む .war ファイルをビルドする別の Maven プロジェクトを作成しました。この .war ファイルに my.gui-0.1.0-jar-with-dependencies.jar を含める必要があります。

jar-with-dependencies.jar ファイルの Maven 座標を特定できませんでした。GUI プロジェクトに Maven 座標を使用すると、GUI プロジェクトの依存関係 .jar ファイルが WEB-INF/lib に配置されますが、これは私が望んでいるものではありません。my.gui-0.1.0-jar-with-dependencies.jar ファイル自体を .war ファイルに含める必要があります。(WEB-INF/libにあると思います。)

依存関係が jar-with-dependencies.jar ファイル自体であることを Maven に伝えるにはどうすればよいですか?

Mavenにjar-with-dependencies.jar自体を含めるように指示するメカニズム以外に別の方法がある場合、それも機能します。jar-with-dependencies.jar は、Java Web Start をサポートするために作成している .war ファイルのどこかになければなりません。

Maven Webstart プラグインがあることは知っていますが、悪夢のように見えるので、必要な JNLP 成果物を使用して自分で .war ファイルを作成しています。

4

2 に答える 2

4

まず、WAR ファイルのユーザーがJAR ファイルをダウンロードできるようにする必要があります。WAR プロジェクトの標準的な依存関係として WEB-INF/lib にファイルを含めることは、あなたが望むものではありません。最も可能性が高いのは、JAR を WAR 内の別のディレクトリ ( など/downloads) に配置することです。

Maven でこれを実現するには、 Maven Dependency Pluginを使用できます。

1: 依存関係プラグインを使用して、JAR ファイルを一時ビルド ディレクトリにコピーします。

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-dependency-plugin</artifactId>
        <version>2.4</version>
        <executions>
          <execution>
            <id>copy</id>
            <phase>generate-resources</phase>
            <goals>
              <goal>copy</goal>
            </goals>
            <configuration>
              <artifactItems>
                <artifactItem>
                  <groupId>my.group</groupId>
                  <artifactId>myartifact</artifactId>
                  <version>1.0</version>
                  <type>jar</type>
                  <overWrite>false</overWrite>
                  <outputDirectory>${project.build.directory}/webapp-downloads</outputDirectory>
                  <destFileName>myartifact.jar</destFileName>
                </artifactItem>
              </artifactItems>
            </configuration>
          </execution>
        </executions>
      </plugin>

ここでは、JAR ファイルを ${project.build.directory/webapp-downloads ディレクトリにコピーしています。

2: WAR プラグインを構成して、依存関係プラグインによって生成されたリソースを含めます。

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-war-plugin</artifactId>
        <version>2.2</version>
        <configuration>
          <webResources>
            <resource>                  
              <directory>${project.build.directory/webapp-downloads</directory>
              <targetPath>downloads</targetPath>
            </resource>
          </webResources>
        </configuration>
      </plugin>

これにより、JAR ファイルがdownloadsディレクトリの下の WAR にバンドルされます。その後、ユーザーは /downloads/myartifact.jar にアクセスしてダウンロードできます。

Webstart の場合、ユーザーに直接 JAR をダウンロードさせるのではなく、適切なパスを使用して JNLP を構成します。

于 2012-04-17T03:35:39.867 に答える