2009-07-09 15 views
5

今まで私の会社でAntを使用していました。アプリケーションをクライアントに送信したいときは、すべてのjarライブラリとAntのすべてのソースコードを単純なバッチファイルとともにパッケージ化した特別なAntスクリプトを実行します。Mavenを使って自己完結型のソースリリースを作成する

クライアントはネットワークアクセスのないコンピュータ(Antの場合もありません)にファイルを置き、バッチファイルを実行することができます。コンピュータに有効なJDKがあれば、バッチスクリプトはjarを使用してすべてのコードをコンパイルし、最終的にアプリケーションサーバー上のクライアントによって展開されるWAR/EARを作成します。

最近私たちはMaven 2に移行しました。しかし、私は同じことをする方法を見出していません。私はMavenアセンブリプラグインを見たことがありますが、これはソースディストリビューションまたはバイナリを作成するだけです。私たちのシナリオは実際には私たちのソースコードが含まれているので、実際には混在していますが、使用するライブラリのバイナリjar(例えばSpring、Hibernate)

したがって、Mavenを使って自己完結型のアセンブリ/リリース/パッケージを作成することは可能ですネットワークアクセスのないコンピュータで実行しますか?つまり、すべてのライブラリを内部に格納する必要があります。

Maven自体も含まれている場合は追加ボーナスですが、これは厳しい要件ではありません。最終パッケージは、1つのコマンドで簡単にコンパイルする必要があります(システム管理者が実行しやすい)。

私はこのために私自身のMavenプラグインを書くことを考えていましたが、誰かがすでにこれに遭遇していると思われます。

答えて

1

あなたはこのアプローチを試みる場合があります:

  • 使用MVNアリ:Mavenプロジェクト
  • から スクリプトはアリは、プロジェクトの依存関係
  • を構築するためにアセンブリを使用していることを確認しますAntのビルドを作成するためにアリアリ
    システム

またはプランB:

  • 使用MVNアリ:
  • Mavenプロジェクトから スクリプトはアリは、プロジェクトの依存関係
  • が使用appassembler
  • のAntを呼び出し、ビルドを実行するために、「ブートストラップクラス」を書くであることを確認してくださいAntのビルドを作成するためにアリプランBで環境

スクリプトビルドを構築してインストールするには、パッケージ化されたソース瓶からソースツリーのどこかを設定して、コールするappassemblerビルドバットまたはSHスクリプトを使用するスクリプトを記述します。ブートストラップとant経由でビルドします。あなたのブートストラップはビルドの前後に何かする必要があります。

これが役に立ちます。

+0

ニース!私はアリについて知りませんでした:アリ – kazanaki

0

おそらく、私が似たような質問のために提出した回答が助けになるかもしれません。 Can maven collect all the dependant jars for a project to help with application deployment?を参照してください。欠落しているのは、アセンブリにソースコードを含める方法です。私はアセンブリプラグインでそれを管理する方法があると想像しなければなりません。これは配布物にMavenを含めることにも対処していません。

AntからMavenに移行する理由は何ですか? Antソリューションですべてがうまく動いたようですが、Mavenとは何ですか?

依存関係管理だけの場合は、techniques for leveraging Maven from Antがあり、両方の世界の中で最高のものを提供します。

+0

主にAntスクリプトが複雑すぎて、ある時点でハードコードされたパスが内部にありビルドサーバー以外のシステムで実行できないため、AntからMavenに移行しました。現在、どのライブラリ(およびライセンス)がプロジェクトで使用されているかを知ることも簡単です。 – kazanaki

0

ソースプラグインは、 "source:jar"というプロポーザルのソースを含むjarを提供します。アセンブラプラグインを使用して、内部プロジェクトのソースjar(これらのソースjarを参照するソースを使用)と外部プロジェクトのバイナリjarを1つのディストリビューションに結合することができます。

しかし、これをコンパイル可能なユニットにすることについては、私は示唆がありません。確かにMavenをバンドルすることができますが、プロジェクトをビルドするために必要なすべてのプラグインを含むバンドルを作成する必要があります。私はそれを行うための既存のツールを知らない。

+0

ハ!はい、それは難しい部分です。コンパイル可能なユニットを取得する方法! – kazanaki

0

これは、ポンポンのビルド部分にこの中に追加します...私はそれを行う方法です。

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-source-plugin</artifactId> 
      <executions> 
       <execution> 
        <id>attach-sources</id> 
        <phase>verify</phase> 
        <goals> 
         <goal>jar</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 
</build> 

をそして、プロファイル部には、このビットを追加します。

<profiles> 
     <profile> 
      <id>release</id> 
      <build> 
       <plugins> 
        <plugin> 
         <groupId>org.apache.maven.plugins</groupId> 
         <artifactId>maven-source-plugin</artifactId> 
         <executions> 
          <execution> 
           <goals> 
            <goal>jar</goal> 
           </goals> 
          </execution> 
         </executions> 
        </plugin> 
       </plugins> 
      </build> 
     </profile> 
    </profiles> 

そして、私がmavenをインストールすると、jarファイルが作成され、ソースのjarファイルもチェックされます。アセンブリ、あなたがターゲットフォルダにyourApp-バージョンで-dependencies.jarになるだろう:あなたは、ビルドの下に以下のプラグイン

<plugin> 
    <artifactId>maven-assembly-plugin</artifactId> 
    <configuration> 
     <descriptorRefs> 
      <descriptorRef>jar-with-dependencies</descriptorRef> 
     </descriptorRefs> 
    </configuration> 
</plugin> 

とMVNアセンブリを呼び出すが含まれている場合、あなたのdevの環境から

+0

どのように役立ちますか?クライアントはjarファイル内のソースを望んでいません。彼らは単一のコマンドでソースをコンパイルしたい。 – kazanaki

2

、。これは自給自足のjarファイルで、Main-class MANIFEST.MFエントリを使用すると、誰でもダブルクリックしてアプリケーションを実行できます。

+0

私はすでにアセンブリプラグインを見てきました。ここで問題となるのは、クライアントがコードをソースからコンパイルしたいということです。彼らはあらかじめコンパイルされた瓶を望んでいません。とにかくありがとう。 – kazanaki