0

私はmavenが初めてです。Hadoop プロジェクトの jar をその依存関係とともにパッケージ化し、次のように使用したいと考えています。

hadoop jar project.jar com.abc.def.SomeClass1 -params ...
hadoop jar project.jar com.abc.def.AnotherClass -params ...

そして、この jar に複数のエントリ ポイントが必要です (異なる Hadoop ジョブ)。

どうすればできますか?

ありがとう!

4

1 に答える 1

1

依存関係を持つ jar を作成するには、次の 2 つの方法があります。

  1. Hadoop は jar 形式の jar をサポートします。つまり、jar には、ジョブの送信時にクラスパスに追加される jar の lib フォルダーが含まれており、タスクの実行をマップ/削減します。
  2. jar の依存関係を解凍し、それらをクラスと共に単一のモノリシック jar に再​​パックできます。

最初の方法では、Maven アセンブリ定義ファイルを作成する必要がありますが、実際にはその価値よりも手間がかかります。2 つ目も Maven アセンブリを使用しますが、組み込みの記述子を使用します。project -> build -> plugins2 番目を使用するには、pom のセクションに次を追加するだけです。

<plugin>
  <artifactId>maven-assembly-plugin</artifactId>
  <version>2.4</version>
  <configuration>
    <descriptorRefs>
      <descriptorRef>jar-with-dependencies</descriptorRef>
    </descriptorRefs>
  </configuration>
</plugin>

mvn package を実行すると、ターゲット フォルダーに 2 つの jar が作成されます。

  1. ${project.name}-${project.version}.jar- プロジェクトのクラスとリソースのみが含まれます
  2. ${project.name}-${project.version}-jar-with-dependencies.jar-クラス/リソースと依存関係ツリーのすべてが含まれ、コンパイルのスコープがアンパックされ、単一のjarに再パックされます

複数のエントリ ポイントの場合、特に何もする必要はありませんMain-Class。jar マニフェストでエントリを定義しないようにしてください (マニフェストを明示的に構成する場合、そうしないと、デフォルトでは Main-Class に名前が付けられないため、いいはず)

于 2013-04-30T23:55:10.857 に答える