2016-07-01 46 views
0

複数の.jarファイルを含むプロジェクトがあります。これを依存関係として追加するには、これらのすべてのjarファイルを大きなjarファイルに変換する必要があります。これまでのところ、私はまで来ていますがなければならないので、これが最終的なjarファイルを作成しますMaven Pluginを使用して複数のjarファイルから.jarファイルを作成する方法

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <parent> 
     <groupId>mainProjects</groupId> 
     <artifactId>mainProjects.master</artifactId> 
     <relativePath>../pom.xml</relativePath> 
     <version>1.0.0-SNAPSHOT</version> 
    </parent> 
    <groupId>mainProjects</groupId> 
    <artifactId>sampleModule1</artifactId> 
    <name>sampleModule1</name> 
    <version>1.0.0.qualifier</version> 
    <build> 
    <plugins> 
    <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-compiler-plugin</artifactId> 
    </plugin> 
    <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-shade-plugin</artifactId> 
     <executions> 
      <execution> 
       <phase>package</phase> 
       <goals> 
        <goal>shade</goal> 
       </goals> 
       <configuration> 
        <artifactSet> 
        <includes> 
         <include>Sample1.jar</include> 
         <include>Sample2.jar</include> 
        </includes> 
        </artifactSet> 
        <finalName>${project.artifactId}-${project.version}-final</finalName> 
        <outputDirectory>${project.artifactId}/build</outputDirectory> 
        <shadedArtifactAttached>false</shadedArtifactAttached> 
       </configuration> 
      </execution> 
     </executions> 
    </plugin> 
    </plugins> 
</build> 
</project> 

、しかし、内部の他のjarファイル(sample1.jarとsample2.jar)からのコンテンツがありません。私はプラグインのドキュメントを調べましたが、彼らがしたのは、ジャーではなく、クラスファイルを使って行うことでした。だから私は今からどのように進むべきかわかりません。

どのような考えですか?

更新:

だから、ここに私は私が持っているプロジェクトの構造を共有、それを明確にするために:私は依存関係としてsampleModule1を使用することができるようにしたい、

+- mainProjects 
| +- pom.xml 
| +- mainProject1 
| | +- pom.xml 
| | +- src 
| +- mainProject2 
| | +- pom.xml 
| | +- src 
| +- group1 
| | +- pom.xml 
| | +- sampleModule1 
| | | +- pom.xml 
| | | +- build 
| | | +- sample1.jar 
| | | +- sample2.jar 
| | | +- sample3.jar 
| | | +- sample4.jar 
| | | +- sample5.jar 
| | | +- sample6.jar 
| | +- sampleModule2 
| | | +- pom.xml 
| | | +- src 

を今すぐにトンを達成するために

 <dependency> 
     <groupId>group1</groupId> 
     <artifactId>sampleModule1</artifactId> 
     <version>1.0.0.qualifier</version> 
     <scope>system</scope> 
     <systemPath>sampleModule1/build/${project.artifactId}-${project.version}-final.jar</systemPath> 
    </dependency> 

:このようなjarファイル、などmainProject1pom.xmlで彼は、私は1つの瓶にすべての瓶をコンパイルする必要があるので、1つを使用して追加することができますsystemPath。私はthisを見つけました。これは、複数のファイルを1つにまとめる方法の例を示しています。しかし、この例では、それらはjarではなく、クラスなどです。今ここで、私は同じものを達成しようとしていますが、ただの瓶しかありません。

+0

プロジェクト構造は何ですか?これらのjarファイルはpom.xmlファイルの外にありますか? – Apostolos

+0

思い出してくれてありがとう。それらはpom.xmlと同じディレクトリにあります。 –

+0

なぜそれらをpom.xmlの依存関係として追加しませんか?それがメイヴンの意味です! – Apostolos

答えて

1

問題を解決するには2通りの方法があります。あなたは自分のjarファイルにファイルを追加したい場合は、これが今のメイン瓶にあなたからlibフォルダをすべてのjarファイルを置く

<build> 
    <resources> 
     <resource> 
      <filtering>false</filtering> 
      <directory>lib</directory> 
      <includes> 
       <include>*.jar</include> 
      </includes> 
     </resource> 
    </resources> 
</build> 

それらを追加するresourcesタグを使用することができます。ルートフォルダは、対応するpom.xmlを呼び出したフォルダです。これにより、任意のファイルをjarファイルに追加できます。 complete syntax referenceについてはこちらをご覧ください。

他の方法とおそらく最も便利な方法は、maven-shade-pluginを使用することです。これにより、ほとんどのものを最終的なjarファイルにコピーできます。

<?xml version="1.0" encoding="UTF-8"?> 
<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-shade-plugin</artifactId> 
    <version>2.4.3</version> 
    <executions> 
     <execution> 
     <phase>package</phase> 
     <goals> 
      <goal>shade</goal> 
     </goals> 
     <configuration> 
      <artifactSet> 
       <includes> 
        <include>groupid:artifactid_a</include> 
        <include>groupid:artifactid_b</include> 
       </includes> 
      </artifactSet> 
      <filters> 
       <filter> 
        <artifact>*:*</artifact> 
        <includes> 
        <include>resources/*.png</include> 
        </includes> 
       </filter> 
      </filters> 
     </configuration> 
     </execution> 
    </executions> 
</plugin> 

artifactSet部品はあなただけでもclassファイル、manifestなどとフォルダのような彼らのgroupidartifactid

これが含まれるコンテンツを言及することにより、ローカルREPROが含まれるように、あなたの中からjarファイルを参照することを可能にします構造)を(あなたのローカルreproから)あなたの瓶に入れます。

他の任意のファイルをjarファイルに含める場合は、ファイルとファイルパターンを直接指定できるプラグインのfilterタグを使用できます。 complete syntax referenceについてはこちらをご覧ください。

P.S:あなたは、特定のファイルを除外したい場合は、excludeタグによってincludeタグを置き換えることができます;-)