2010-11-22 12 views
8

私はantを使ったプロジェクトに取り組んでいます。私は基本的にjarを最初に実行したターゲットdistを持っていて、そのアプリケーションをディレクトリにインストールしました。'dist'に似た目標はありますか?

これは、インストールディレクトリにbin/,lib/config/などのディレクトリを作成し、関連するファイルをそれぞれのディレクトリにコピーすることを意味します。

私の質問は二つある:

  1. は、この種のものを行う任意のMavenの目標はありますか?
  2. そうでなければ、私はmaven distをやりたいと思います。 Mavenを使ってこれを達成することをどのように提案しますか?
  3. 自分の "ターゲット"(distのような)を持つことができない場合は、何が最善の方法でしょうか?

ボトムライン:私はこのすべてをしたいが、デフォルトの「ターゲット」の動作を変更したくないなど、コンパイルやパッケージ等を

おかげで、JRH

PS:私はconfigに行くだろうかわからないMavenのバージョン2.2.21

答えて

6

を使用していますが、libbinが簡単です。 copy all dependencies to a folder

ちょうどこの操作を行います。

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-dependency-plugin</artifactId> 
    <executions> 
     <execution> 
      <id>copy-dependencies</id> 
      <phase>package</phase> 
      <goals> 
       <goal>copy-dependencies</goal> 
      </goals> 
      <configuration> 
       <outputDirectory> 
       ${project.build.directory}/dist/lib 
       </outputDirectory> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 

を出力するためにあなたのjarファイルをbinフォルダに行い、この(reference page):

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-jar-plugin</artifactId> 
    <configuration> 
     <finalName>${project.artifactId}</finalName> 
     <outputDirectory>${project.build.directory}/dist/bin</outputDirectory> 
    </configuration> 
</plugin> 

ああ、追加の要件があります

ボトムライン:これをすべてやりたいですが、cのようなデフォルトの "ターゲット"の動作を変更したくありませんこの場合ompileやパッケージなど

私が上でこれを有効にするプロファイルを使用したい:あなたは追加しない場合は今、あなたはあなたのdistディレクトリを得るためにmvn clean package -Pdistを行うと考え

<profile> 
    <id>dist</profile> 
    <build> 
     <plugins> 
      <!-- insert stuff from above here --> 
     </plugins> 
    </build> 
</profile> 

デフォルトの動作が得られます。

基本的に、物事は、antでのやり方とは異なる方法で動作します。ターゲットはなく、ライフサイクルフェーズとプラグインの目標だけがあります。あなたがmvn compileをすれば

あなたがアップし、このいずれかにすべてのフェーズにバインドされているすべてのMavenプラグインの目標を呼び出しますライフサイクル・フェーズを実行するか(例えば、以下のフェーズが実行されます:validateinitializegenerate-sourcesprocess-sourcesgenerate-resources,process-resources,compile)。しかし、distという名前のライフサイクルフェーズを定義する(簡単な)方法はありません。

また、特定のプラグインの目標を実行することもできます(複数のフェーズやプラグインの目標を実際に実行できます)。例えば。独自のdistプラグインを作成してmvn dist:distを使用して呼び出すこともできますが、既存の機能を使用していて、プロファイルソリューションが適切に機能しているため、推奨しません。

+0

大丈夫ですが、このアクションはどのように始まりますか?私は 'mvn package'を実行しますか?私は 'maven dist'のようなことをして、これを起こさせたいのですが(質問でこれを更新しました)可能ですか? – jrharshath

+0

+1 hm、参考にしてください。質問:私はパッケージのライフサイクルまたは展開で何をしたいのですか?なぜ? – jrharshath

+0

@simpaticoこれは私の答えではなく、質問に対するコメントでなければならないと思いますか? –

0

あなたは(ショーンによって示唆されているように、またはmvn clean package -Pdist)あなたはmvn install -Pdistとして実行さcustom actiondistを作成することができますNetBeansの(と私は信じている他のIDE)で、maven distを持つことはできません。

1

assembly pluginの場合はassembly descriptorと書いてみることができます(または適切なgoogleを検索する)。この

<assembly 
    xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation= 
    "http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 
     http://maven.apache.org/xsd/assembly-1.1.2.xsd"> 

    <id>dist</id> 
    <formats><format>zip</format></formats> 

    <fileSets> 
    <fileSet> 
     <directory>src/main/config</directory> 
     <outputDirectory>config</outputDirectory> 
     <useDefaultExcludes>true</useDefaultExcludes> 
    </fileSet> 
    </fileSets> 

    <files> 
    <file> 
     <source>${project.build.directory}/${project.artifactId}.jar</source> 
    </file> 
    </files> 

    <dependencySets> 
    <dependencySet> 
     <useProjectArtifact>false</useProjectArtifact> 
     <outputDirectory>lib</outputDirectory> 
    </dependencySet> 
    </dependencySets> 
</assembly> 

よう

何かがあなたのtargetディレクトリ内${project.artifactId}-dist.zipを作成します。 zipファイルが

アセンブリプラグインのみが圧縮されたファイルが作成されますように見えます
yourProjectName/ 
yourProjectName/config/... 
yourProjectName/lib/... 
yourProjectName/${project.artifactId}.jar 

ようにレイアウトされ、それだけでdistフォルダにコピーしません。

1

アースアサンプラープラグインについて知るまでは、セーンズの答えはいいですし、ほとんど私はそれに行きましたhttp://mojo.codehaus.org/appassembler/appassembler-maven-plugin/

は例https://github.com/khmarbaise/maven-training/tree/master/502-assembly-plugin

これは、パッケージのライフサイクルの一部として呼ばれているため、ここを参照してください。

<build> 
<plugins> 
    <plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-compiler-plugin</artifactId> 
    <version>2.3.2</version> 
    <configuration> 
     <source>1.6</source> 
     <target>1.6</target> 
    </configuration> 
    </plugin> 
    <plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>appassembler-maven-plugin</artifactId> 
    <version>1.1</version> 
    <executions> 
     <execution> 
     <phase>prepare-package</phase> 
     <goals> 
      <goal>assemble</goal> 
     </goals> 
     </execution> 
    </executions> 
    <configuration> 
     <binPrefix>utility</binPrefix> 
     <assembleDirectory>${project.build.directory}/appassembler</assembleDirectory> 
     <extraJvmArguments>-Xms512m -Xmx1024m</extraJvmArguments> 
     <generateRepository>false</generateRepository> 
     <repositoryName>lib</repositoryName> 
     <repositoryLayout>flat</repositoryLayout> 
     <includeConfigurationDirectoryInClasspath>true</includeConfigurationDirectoryInClasspath> 
     <platforms> 
     <platform>windows</platform> 
     <platform>unix</platform> 
     </platforms> 
     <programs> 
     <program> 
      <mainClass>com.soebes.tools.cli.UtilityCLI</mainClass> 
      <name>utility</name> 
     </program> 
     </programs> 
    </configuration> 
    </plugin> 
    <plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-assembly-plugin</artifactId> 
    <version>2.2</version> 
    <configuration> 
     <descriptors> 
     <descriptor>src/main/assembly/bin.xml</descriptor> 
     <descriptor>src/main/assembly/bin-unix.xml</descriptor> 
     <descriptor>src/main/assembly/src.xml</descriptor> 
     </descriptors> 
     <tarLongFileMode>gnu</tarLongFileMode> 
    </configuration> 
    <executions> 
     <execution> 
     <phase>package</phase> 
     <goals> 
      <goal>single</goal> 
     </goals> 
     </execution> 
    </executions> 
    </plugin> 
</plugins> 

記述子それが参照するには、かなりstraigtforwardであり、それはまた、あなたのアプリケーションを実行するためのバッチやシェルスクリプトを作成します!

関連する問題