12

マルチモジュール プロジェクトがあり、すべてのモジュールのクラスを含む単一の jar を作成したいと考えています。親 POM 内で、次のプラグインを宣言しました。

<plugin>
 <groupId>org.apache.maven.plugins</groupId>
 <artifactId>maven-assembly-plugin</artifactId>
 <configuration>
  <descriptorRefs>
   <descriptorRef>bin</descriptorRef>
  </descriptorRefs>
 </configuration>
</plugin>

ただし、mvn assembly:assembly を実行すると、親フォルダー (空) のソースのみが含まれます。モジュールのソースをアーカイブに含めるにはどうすればよいですか?

4

3 に答える 3

8

Maven Shade Plugin を探していると思います。

http://maven.apache.org/plugins/maven-shade-plugin/index.html

任意の数の依存関係を uber パッケージの依存関係にパッケージ化します。その後、これをリポジトリにデプロイできます。

于 2010-05-12T19:41:17.017 に答える
7

すべてのモジュールのクラスを単一の jar にパッケージ化するには、次のことを行いました。

  1. 他のすべてのモジュールの内容を単一の jar にパックするためだけに使用される追加のモジュールを作成しました。これは通常、アセンブリ モジュールと呼ばれます。このモジュールを対象の jar ファイルと同じように呼び出してみてください。

  2. この新しいモジュールの pom.xml に、maven-assemby-plugin を追加しました。このプラグインは、すべてのクラスをパッケージ化し、単一のファイルに配置します。追加の構成ファイルを使用します (ステップ 4.)。

<build>
    <plugins>
      <plugin>
        <artifactId>maven-assembly-plugin</artifactId>
        <version>2.4</version>
        <executions>
          <execution>
            <id>go-framework-assemby</id>
            <phase>package</phase><!-- create assembly in package phase (invoke 'single' goal on assemby plugin)-->
            <goals>
              <goal>single</goal>
            </goals>
            <configuration>
              <descriptors>
                <descriptor>src/main/assemble/framework_bin.xml</descriptor>
              </descriptors>
                  <finalName>framework</finalName>
                  <appendAssemblyId>false</appendAssemblyId>
          </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>

3.この新しいモジュールのpom.xmlで、親pomを含む他のすべてのモジュールへの依存関係も追加しました。依存関係に含まれるモジュールのみがターゲット jar ファイルにパックされます。

<dependencies>
    <dependency>
        <groupId>${project.groupId}</groupId>
        <artifactId>fwk-bam</artifactId>
        <version>${project.version}</version>
    </dependency>...

4.最後に、アセンブリモジュールにアセンブリ記述子を作成しました(ファイル:src/main/assemble/framework_bin.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>all-jar</id>
    <formats>
        <format>jar</format> <!-- the result is a jar file -->
    </formats>

    <includeBaseDirectory>false</includeBaseDirectory> <!-- strip the module prefixes -->

    <dependencySets>
        <dependencySet>
            <unpack>true</unpack> <!-- unpack , then repack the jars -->
            <useTransitiveDependencies>false</useTransitiveDependencies> <!-- do not pull in any transitive dependencies -->
        </dependencySet>
    </dependencySets>
</assembly>
于 2014-02-13T12:18:42.413 に答える
0

事前定義されbinたものは、ここではうまくいきません。事前定義された記述子と同様のカスタム記述子を使用する必要がありますが、それはプロジェクトモジュールを含めるbinことを宣言します。moduleSet

于 2010-04-23T14:28:19.533 に答える