2009-07-02 20 views
4

私はmavenプロジェクトを持っています。依存関係を持つプロジェクトの配布を作成したいと思います。私はmaven-assembly-pluginを試して、依存関係を持つjarファイルを作成しましたが、jarファイルすべてを解凍して、すべてを大きな単一のjarファイルに再パッケージ化しました。私が望むのは、jarファイルとすべての依存関係を持つlibフォルダのようなものです。それから私はそれを実行すると、私は "java -cp lib/* my.package.MainClass"を実行することができます。mavenプロジェクトをデプロイ

これを行うにはどうすればよいですか?または、展開するための推奨方法は?あなたが一緒に実行するためにメインクラスを指定し、アーカイブをパッケージ化するのmaven-jarファイルのプラグインを使用することができるはず

http://maven.apache.org/shared/maven-archiver/index.html

おかげで、

ジェフ

答えて

7

私はちょうど私のプロジェクトで、そのためにMavenのアセンブリを使用していました。

まず、あなたのPOMであなたのプラグインを有効にして、アセンブリの設定を呼び出す:

 <plugin> 
      <artifactId>maven-assembly-plugin</artifactId> 
      <!--I recommend 2.1 as later versions have a bug that may 
           Duplicate files in your archive 
          --> 
          <version>2.1</version> 
      <!--Executes the packaging along with the mvn package phase 
          --> 
      <executions> 
       <execution> 
        <id>make-assembly</id> 
        <phase>package</phase> 
        <goals> 
         <goal>attached</goal> 
        </goals> 
       </execution> 
      </executions> 
      <configuration> 
       <descriptors> 
        <!--Relative path to your descriptor --> 
        <descriptor>src/main/assembly/package.xml 
         </descriptor> 
       </descriptors> 
      </configuration> 
     </plugin> 

あなたは全部に

<assembly> 
    <!-- this will create an extra resource project-1.1.1-package.zip, you can 
     choose jar as well in the format--> 
    <id>package</id> 
    <formats> 
     <format>zip</format> 
    </formats> 
    <includeBaseDirectory>false</includeBaseDirectory> 
    <!-- Insert here extra files as configs or, batch files, resources, docs etc--> 
    <fileSets> 
     <fileSet> 
      <directory>src/main/assembly/files</directory> 
      <outputDirectory>/</outputDirectory> 
      <includes> 
       <include>**/conf/*.*</include> 
       <include>**/doc/*.*</include> 
      </includes> 
     </fileSet> 
      <!-- I like to integrate the jre as well... simplifies my deployement --> 
     <fileSet> 
      <directory>target/jre</directory> 
      <outputDirectory>/jre</outputDirectory> 
     </fileSet> 
    </fileSets> 
    <!-- This will scrub your dependencies and add them to your lib folder, I excluded 
     Test stuff as it is not needed, could have declared the resource as a test 
     only phase as well would not have had to exclude it here 
    --> 
    <dependencySets> 
     <dependencySet> 
      <outputDirectory>lib</outputDirectory>   
      <excludes> 
       <exclude>junit:junit</exclude> 
      </excludes> 
     </dependencySet> 
    </dependencySets> 
</assembly> 
をパッケージ化する前に、次に、あなたの記述にあなたがあなたのレイアウトになりたい方法を決定することができます

これは、出力ディレクトリの設定で指定したレイアウトのzipファイルを作成し、zipファイルとしてパッケージ化します(zip、jar、war ...を選択して残りのものをリポジトリに展開します)。

シンプルにするためにビットとピースをスキップしましたが、バッチファイル、dlls、config、doc、JREを含むパッケージに展開されていますので、必要なものはすべて同じzipにあります。 start.batをクリックしてください!

私はおそらく、METADATAで適切にフォーマットされたジャーに入れて、それをすべてダブルクリックして起動する必要がありました。このオプションの周りをおもちゃにする時間はありませんでしたが、試してみてください。

アセンブリプラグイン2.1より前のバージョンに注意してください。ディレクティブで別の場所にある同じファイルを見つけることができれば、重複したエントリが作成されます。解凍すると非常に危険ではありませんが、ファイルを上書きしたい場合は解凍しても迷惑をかけることがあります。何とか彼らが内容が違うことが判明した場合、どちらが勝ったのかわからないという事実をプラスします。

Mavenは素晴らしかったですが、時にはそれを動作させるのがイライラしていることがわかりました.Plusのドキュメントは、たまに見つけるのが難しい場合もあります。しかし、適切に使用すると、時間を節約できます。

幸運

+0

素晴らしい回答をいただきありがとうございます。私はこれを試してみるつもりです。 –

+0

このアプローチに問題がある場合は、私にバズを与えてください。同様の結果を得るための他の方法があるかもしれませんが、これは私にとってはうまくいきます。 – Newtopian

+0

これまでのところ良いです。私は試してみましたが、他にもいくつか簡単な質問がありました。 私の実際のスナップショットファイルもlibディレクトリに終わった。私はlibディレクトリの外にそれを持つことを望んでいた - それは可能ですか? また、これをmaven-jar-pluginと組み合わせて使用​​して、マニフェストファイルを生成し、これを実行可能なjarファイルにすることはできますか?それともアプリを起動するスクリプトを作成する方が良いでしょうか? もう一度ありがとう! –

1

参照してください。クラスパスで。プロジェクト用のマニフェストファイルを生成することができます。

http://maven.apache.org/shared/maven-archiver/examples/classpath.html#Prefix

+0

ジョン、ありがとう。私はマニフェストを適切に生成することができましたが、必要なディレクトリ構造を実際に作成する方法がありますか?例えば、私はclasspathPrefix lib /を作っています。私はそれにコピーされた依存関係で生成されたlibディレクトリを持っていたいと思います。 –

+0

ここで2番目のリンクは、これを行う方法を説明しています...http://maven.apache.org/shared/maven-archiver/examples/classpath.html#Prefix – Jon

関連する問題