2009-11-24 2 views
24

私は(明らかに)瓶を作るプロジェクト( 'jar'型)を持っています。しかし、そのプロジェクトには多くの依存関係があります。私はMavenに、jar、すべての依存jar、およびいくつかのスクリプト(アプリケーションの起動など)を含むパッケージまたはアセンブリを構築したいと思います。Mavenでは、プロジェクトのjarとすべての依存jarを持つ配布可能なものをビルドするにはどうしたらいいですか?

これについては、どのような方法が最適ですか?具体的には、扶養家族を組立に入れる最良の方法は何ですか?

答えて

25

、私は次の1(src/assembly/bin.xml)のように見えるのアセンブリを使用したい:、このアセンブリを使用するには

<assembly> 
    <id>bin</id> 
    <formats> 
    <format>tar.gz</format> 
    <format>tar.bz2</format> 
    <format>zip</format> 
    </formats> 
    <dependencySets> 
    <dependencySet> 
     <unpack>false</unpack> 
     <scope>runtime</scope> 
     <outputDirectory>lib</outputDirectory> 
    </dependencySet> 
    </dependencySets> 
    <fileSets> 
    <fileSet> 
     <directory>src/main/command</directory> 
     <outputDirectory>bin</outputDirectory> 
     <includes> 
     <include>*.sh</include> 
     <include>*.bat</include> 
     </includes> 
    </fileSet> 
    </fileSets> 
</assembly> 

をあなたのpom.xmlに以下の設定を追加します。

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-assembly-plugin</artifactId> 
    <configuration> 
     <descriptors> 
     <descriptor>src/assembly/bin.xml</descriptor> 
     </descriptors> 
    </configuration> 
    <executions> 
     <execution> 
     <phase>package</phase> 
     <goals> 
      <goal>single</goal> 
     </goals> 
     </execution> 
    </executions> 
    </plugin> 

このサンプルでは、​​src/main/commandの下にある開始/停止スクリプトはbinにバンドルされています。依存関係はlibにバンドルされています。ニーズに合わせてカスタマイズしてください。

+0

私はこれが正当化しているために十分一般的でした考え出し組み込みのアセンブリですが、明らかにそうではありません。いつものようにありがとう。 – Jared

+0

私は本当に同意します。このようなもののためにあらかじめ定義された記述子を持つことは理にかなっています(スクリプトの場所など、いくつかの規則に基づいています)。 –

5

.zip(または.tar.gz/.tar.bz2)を作成し、libフォルダー内のすべての依存関係を作成するための私の解決策です。それはされます:

  1. は、クラスパスとjarを実行するときに実行するメインクラスとしてlibディレクトリの依存関係を含めたマニフェストでjarを作成します。
  2. すべての依存jarファイルをtarget/libディレクトリにコピーします。
  3. libディレクトリのメインjarとすべての依存jarで配布可能な `zip 'を作成します。

pom.xmlからの抜粋:

<!-- create distributable --> 
<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-jar-plugin</artifactId> 
    <configuration> 
     <archive> 
      <manifest> 
       <addClasspath>true</addClasspath> 
       <classpathPrefix>lib/</classpathPrefix> 
       <mainClass>full.path.to.MainClass</mainClass> 
      </manifest> 
     </archive> 
    </configuration> 
</plugin> 
<plugin> 
    <artifactId>maven-dependency-plugin</artifactId> 
    <executions> 
     <execution> 
      <phase>package</phase> 
      <goals> 
       <goal>copy-dependencies</goal> 
      </goals> 
      <configuration> 
       <outputDirectory>${project.build.directory}/lib</outputDirectory> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 
<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-assembly-plugin</artifactId> 
    <executions> 
     <execution> 
      <phase>package</phase> 
      <goals> 
       <goal>attached</goal> 
      </goals> 
      <configuration> 
       <descriptors> 
        <descriptor>src/main/resources/dist.xml</descriptor> 
       </descriptors> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 

dist.xml

<assembly 
    xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd"> 
    <id>bin</id> 
    <formats> 
     <format>zip</format> 
     <format>tar.gz</format> 
    </formats> 
    <fileSets> 
     <fileSet> 
      <directory>${project.basedir}</directory> 
      <outputDirectory>/</outputDirectory> 
      <includes> 
       <include>README*</include> 
       <include>LICENSE*</include> 
       <include>NOTICE*</include> 
      </includes> 
     </fileSet> 
     <fileSet> 
      <directory>${project.build.directory}</directory> 
      <outputDirectory>/</outputDirectory> 
      <includes> 
       <include>*.jar</include> 
      </includes> 
     </fileSet> 
     <fileSet> 
      <directory>${project.build.directory}/lib</directory> 
      <outputDirectory>lib</outputDirectory> 
      <includes> 
       <include>*.jar</include> 
      </includes> 
     </fileSet> 
     <fileSet> 
      <directory>${project.build.directory}/site</directory> 
      <outputDirectory>docs</outputDirectory> 
     </fileSet> 
    </fileSets> 
</assembly> 

dist.xmlがここbin記述形式から派生した:http://maven.apache.org/plugins/maven-assembly-plugin/descriptor-refs.html#bin

+0

また、Pascal Thiventが提案した 'dist.xml'に' dependencySet'設定を追加し、 'pom.xml'の' maven-dependency-plugin'を取り除くこともできます。 –

関連する問題