2012-04-16 8 views
4

jar-depend-dependencies.jarファイルとしてSwingクライアントを構築する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を含める必要があります。Mavenを使用してJNLP用のjar-with-dependencies.jarを含む.warファイルを作成します。

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

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

Mavenにも動作するjar-with-dependencies.jarを含めるように指示するメカニズムの他に、別の方法がある場合。 jar-with-dependencies.jarは、Java Web Startをサポートするために作成する.warファイルのどこかにある必要があります。

私はMaven Webstartプラグインがありますが、that looks like a nightmareがあることを知っていますので、必要なJNLP成果物を使って.warファイルを作成しています。

+1

*「WEB-INF/libにあると思われます」* JWSデプロイメント向けのものではありません。 'WEB-INF/lib'内のJARファイルは、ブラウザのアドレスバーにURLを入力して 'Enter'キーを押すことで直接アクセスできないため、アプレットやWebスタートアプリケーションには使用できません。 –

+1

Maven Webstart Nightmareの著者は、実用的な解決策を手に入れました:http://www.shaunabram.com/swing-webstart-maven-example/ –

答えて

4

まず、WARファイルのユーザーがJARファイルをにダウンロードしてにダウンロードしてください。 WARプロジェクトの標準依存としてWEB-INF/libにファイルを含めることは、あなたが望むものではありません。あなたが最も望むものは、JARをWAR内の別のディレクトリに入れることです(/downloadsなど)。

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

1:依存プラグインを使用して、copyの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> 

我々は

2 $ {project.build.directory/webapp-downloadsディレクトリ

にJARファイルをコピーしている:依存関係のプラグインによって生成されたリソースが含まれるように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> 

これはdownloadsディレクトリの下にあなたWARにバンドルされるJARファイルの原因となります。ユーザーは/downloads/myartifact.jarに移動してダウンロードしてダウンロードすることができます。

webstartの場合、JARファイルを直接ダウンロードするのではなく、適切なパスでJNLPを設定します。

+0

私の編集で回答を受け入れています(私はを1に追加しました)。私のjar-with-dependenciesを得るために)。 –

+0

de.jnlpファイルのコピーにも依存プラグインを使用できますか?私は自分のjarlpファイルを自分のjarプロジェクトから戦争にコピーすることを躊躇しています。 – Nuria

0

私の場合のように.jnlpファイルもコピーしたい場合は、アンパックゴールを使用できます。これは、webstart-maven-pluginがjarファイルとjnlpファイルをzipにパックすることができるためです。

<execution> 
    <id>unpack</id> 
    <phase>process-resources</phase> 
    <goals> 
      <goal>unpack</goal> 
    </goals> 
    <configuration> 
     <artifactItems> 
     <artifactItem> 
      <groupId>myGroup</groupId> 
      <artifactId>myArtifact</artifactId> 
      <version>1.0</version> 
      <type>zip</type> 
      <overWrite>true</overWrite> 
      <outputDirectory>${project.build.directory}/webapp-downloads</outputDirectory> 
     </artifactItem> 
    </artifactItems> 
    </configuration> 
</execution> 
関連する問題