プロファイルでこれを行うことができます...
本当に 2 つの個別のプロファイルを使用し、JAR プラグインをカスタマイズして、クラス名とパッケージ名のパターンを含めたり除外したりしたい場合は、POM に次のようなものを入れることで簡単に実行できます。
<profiles>
<profile>
<id>everything</id>
<build>
<plugins>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<classifier>everything</classifier>
<includes>
<include>**/*</include>
</includes>
</configuration>
</plugin>
</plugins>
</build>
</profile>
<profile>
<id>only-library</id>
<build>
<plugins>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<classifier>only-library</classifier>
<excludes>
<exclude>**/Main*</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
</profile>
</profiles>
余談ですが、設定が大変だと思われる方のために、ポリグロット Maven の Groovy POM のサポートはほぼ準備が整っています。これにより、ラインカウントが大幅に削減されます。
これを pom.xml の最後 (project 要素内) に配置すると、2 つのプロファイルが追加されます。最初のプロファイル「everything」は、構成を示すためのものです。この「すべて」のプロファイルは、デフォルトの JAR プラグイン jar ゴール実行の動作を単純に複製するため、不要です。2 番目のプロファイル「only-library」は、テキスト「Main」で始まるすべてのパッケージ内のすべてのクラスを除外します。これらのプロファイルを呼び出すには:
mvn package -Peverything
mvn package -Ponly-library
Maven by Example の第 6 章に同梱されているサンプル アプリケーションに対してこれをテストしました。これらのコマンドのいずれかを実行すると、分類子を持つ ${basedir}/target に JAR ファイルが生成されます。JAR プラグインの jar ゴールはデフォルトの Maven ライフサイクルのパッケージ フェーズにバインドされているため、これら 2 つのプロファイルはこのプラグインの構成を変更します。
または、2 つの JAR プラグインを実行してこれを行うこともできます...
プロファイルを使用せずに 2 つの JAR を作成する必要がある場合。JAR プラグインの jar ゴールをパッケージ ライフサイクル フェーズに複数回バインドし、構成された実行ごとに異なる構成を使用できます。2 つの個別の実行を構成する場合、各実行には実行固有の構成ブロックがあるため、実行ごとに一意の識別子と包含/除外パターンを指定できます。
以下は、両方のカスタム JAR をライフサイクル フェーズの「パッケージ」に追加するために使用するビルド要素です。パッケージ化された「jar」を含むプロジェクトでこれを行うと、jar ゴールが 3 回実行されることになります。1 回はデフォルトのライフサイクル バインディングとして、次に 2 つのカスタムの分類された JAR 用に 2 回。
<build>
<plugins>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<executions>
<execution>
<id>only-library</id>
<goals><goal>jar</goal></goals>
<phase>package</phase>
<configuration>
<classifier>only-library</classifier>
<excludes>
<exclude>**/Main*</exclude>
</excludes>
</configuration>
</execution>
<execution>
<id>everything</id>
<goals><goal>jar</goal></goals>
<phase>package</phase>
<configuration>
<classifier>everything</classifier>
<includes>
<include>**/*</include>
</includes>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
各成果物に異なるクラスのセットを含めることについて話していない場合は、Maven アセンブリを使用することをお勧めします。アセンブリの詳細を知りたい場合は、Maven: The Complete Reference からのこの回答の最後にリストされている章があります。率直に言って、私はこの特定の章が良い入門書だとは思いません。実際、私はこの章がほとんど読めないという報告を数多く受けています (そして、私たちはそれを修正するために取り組んでいます)。アセンブリの使用を検討している場合は、Maven Assembly Plugin のドキュメントをお勧めします。左側のナビゲーション メニューに、サンプル アセンブリ記述子のリストが表示されます。
免責事項:(お願い)これをしないでください。2 つの異なるクラス セットを持つ 2 つの異なる JAR を作成する場合は、プロジェクトを 2 つの相互依存モジュールに分割することを強くお勧めします。
プロファイルを使用してこれを行うこともできますが、プロジェクトを 2 つ (実際には 3 つ) に分割する方が簡単です。長期的には、アプリケーションの規模が拡大するにつれて直面する課題があります。分類された各 JAR に含まれるクラスとパッケージのこの手動リストを理解するのは、あなたの責任です。
2 つの個別のモジュールを参照する単純な親プロジェクトを持つことによるオーバーヘッドは最小限です。無料の Maven by Example ブックを見ると、単一モジュール プロジェクトと複数モジュール プロジェクトの間で移行を行う方法が示されています。 第 3 章から第 5 章では単一モジュール プロジェクトに焦点を当て、第 6 章ではこれらの単一モジュール コンポーネントを組み合わせてより大きな複数モジュール プロジェクトにする方法を示します。
詳細については:
質問には次のトピックが含まれます。それぞれの詳細を提供するリンクがいくつかあります。
Maven JAR プラグイン: http://maven.apache.org/plugins/maven-jar-plugin/jar-mojo.html
マルチモジュール Maven プロジェクト: Maven by Example の第 6 章およびMaven: The Complete Reference のセクション 3.6.2。
Maven ライフサイクル (パッケージが "jar" の場合、jar はパッケージにバインドされます): Maven by Example "Core Concepts" のセクション 3.5.2およびMaven: The Complete Reference の第 4 章
Maven アセンブリ: 最初にMaven アセンブリ プラグイン サイト、次にMaven: The Complete Reference の第 8 章で、いくつかの重い (ほとんど重すぎる) 詳細について説明します。