2011-10-13 34 views
5

Eclipseで、隣接するサブフォルダに必要な依存関係を持つプロジェクトjarを作成できます。Mavenを使用して、サブフォルダ(Eclipseのような)に必要なライブラリを作成する方法

  1. Export-> Javaベース> RunnableをJARファイル

  2. ライブラリの選択処理オプション:次の生成されたJARにサブフォルダに必要なライブラリをコピーし

行う方法がありますこのwi Mavenアセンブリプラグインですか?あるいは、この作業にもっと適した別のMavenプラグインがありますか?

ありがとうございます!

答えて

4

はいアセンブリプラグインを使用できます。 のpom.xml:

<build> 
    <!-- final name set the jar name, if left it 
    will give defualt "${artifactId}-${version}" --> 
    <finalName>jar final name</finalName> 
    <sourceDirectory>src</sourceDirectory> 

     <!-- compiler plug in --> 
     <plugin> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <configuration> 
       <source>1.6</source> 
       <target>1.6</target> 
      </configuration> 
     </plugin> 
     <!-- assembly plugin --> 
     <!-- the assembly plugin is used to define your 
     final deploy output (jar, zip, dir, war, etc..)--> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-assembly-plugin</artifactId> 
      <executions> 
       <execution> 
        <id>assembly:package</id> 
        <phase>package</phase> 
        <goals> 
         <goal>single</goal> 
        </goals> 
        <configuration> 
         <!-- The filename of the assembled distribution 
         file defualt ${project.build.finalName}--> 
         <finalName>${project.build.finalName}</finalName> 
         <appendAssemblyId>false</appendAssemblyId> 
         <!-- A list of descriptor files path to generate from--> 
         <descriptors> 
          <descriptor>assembly/assembly.xml</descriptor> 
         </descriptors> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 
     <!-- jar plug in --> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-jar-plugin</artifactId> 
      <version>2.3</version> 
      <configuration> 
       <archive> 
        <manifest> 
         <mainClass>fully.qualified.MainClass</mainClass> 
         <!-- to create a class path to your 
         dependecies you have to fill true in this field--> 
         <addClasspath>true</addClasspath> 
         <!-- if you put your dependencySet/outputDirectory 
         in the assembly file is in a specific folder (lib for example), 
         you need to add classpathPrefix--> 
         <classpathPrefix>lib/</classpathPrefix> 

         <!-- if you defined your dependencySet/outputFileNameMapping 
         in the assembly, instead of using the classpathPrefix, 
         you should use customClasspathLayout, 
         add the classpathPrefix at the begining of the 
         customClasspathLayout, and then add the pattern of the outputFileNameMapping, 
         NOTICE YOU NEED TO ADD '$' BEFOR OF EACH '$'. 
         supported only from version 2.3>--> 
         <!--<classpathLayoutType>custom</classpathLayoutType> 
         <customClasspathLayout> 
          lib/$${artifact.groupId}.$${artifact.artifactId}.$${artifact.extension} 
         </customClasspathLayout>--> 

        </manifest> 

        <manifestEntries> 
         <Class-Path>conf/</Class-Path> 
        </manifestEntries> 
       </archive> 

      </configuration> 
     </plugin> 

    </plugins> 
</build> 

assembly.xml

<?xml version="1.0" encoding="UTF-8"?> 
<assembly> 
    <!--the id will be add to the end of the distribution file --> 
    <id>package</id> 
    <formats> 
     <format>zip</format> 
    </formats> 
    <includeBaseDirectory>true</includeBaseDirectory> 


    <fileSets> 
     <fileSet> 
      <directory>target</directory> 
      <outputDirectory></outputDirectory> 
      <includes> 
       <include>*.jar</include>     
      </includes> 
     </fileSet> 
     <fileSet> 
      <directory>icons</directory> 
      <outputDirectory>icons</outputDirectory> 
      <includes> 
       <include>**/*</include> 
      </includes> 
     </fileSet> 
     <fileSet> 
      <directory>conf</directory> 
      <outputDirectory>conf</outputDirectory> 
      <includes> 
       <include>**/*</include> 
      </includes> 
     </fileSet> 
    </fileSets> 

    <files> 
     <!-- you need to create the bat file yourself --> 
     <file> 
      <source>batFileName.bat</source> 
      <filtered>true</filtered> 
     </file> 
    </files> 

     <dependencySets> 
      <dependencySet> 
       <!--define the outputDirectory of the dependencies, 
        NOTICE: if it's diffrent from '/' make sure to 
        change the classPath configuration for 
        the maven-jar-plugin in the pom--> 
       <outputDirectory>lib</outputDirectory> 
       <!-- maping the dependencies jar names. 
        NOTICE : if you used this definition, you need to use 
        customClasspathLayout classPath configuration 
        for the maven-jar-plugin in the pomg--> 
       <outputFileNameMapping> 
        ${artifact.groupId}.${artifact.artifactId}.${artifact.extension} 
       </outputFileNameMapping> 
       <unpack>false</unpack> 
      </dependencySet> 
     </dependencySets> 

</assembly> 
+0

私たちがMavenを使って他の人に定義してもらうように言ったとき、あなたが望む結果をたくさん「コンベンション」した時がありました。 Ant(および他のビルドツールも同様です)では、あまり考えないでしょう... :-( – mliebelt

+1

メイヴァンにはメリットはほとんどありません。私はそれを愛し、最高のものにする必要があります。 –

+1

詳細な応答ありがとうございました!あなたのサンプルはプロジェクトに完全に対応しています。つまり、Javaビルドをビルドサーバーに移すことができます。プロセスとアプリケーションの安定性が大幅に向上しました。もう一度、ありがとうございます。 – HeavyE

1

それはあなたが望むものを正確ではないのですが、あなたは(-DfailOnMissingWebXml=false付き)war:war目標を使用している場合、それはあなたのtargetフォルダにWEB-INF/libディレクトリに依存関係を配置します。

dependency pluginをチェックしてください。

+0

あなたが言ったように、私たちが探しているが、私たちは、ビルド、そう+1を自動化できるようになるではない、まさに!私がすぐに全Mavenソリューションを聞くことができなければ、あなたは間違いなく回答クレジットを得るでしょう。ありがとうartbristol! – HeavyE

関連する問題