我是Maven的新手。我想将我的hadoop项目的jar与其依赖项打包,然后像这样使用它:
hadoop jar project.jar com.abc.def.SomeClass1 -params ... hadoop jar project.jar com.abc.def.AnotherClass -params ...
我希望这个jar有多个入口点(不同的hadoop作业)。我怎么能做到?谢谢!
dsekswqp1#
有两种方法可以创建具有依赖关系的jar:hadoop支持jar格式的jar,这意味着您的jar包含jar的lib文件夹,这些jar将在提交作业和Map/减少任务执行时添加到类路径中您可以将jar依赖项解压,并将它们与类一起重新打包到单个单片jar中。第一种方法需要您创建一个maven程序集定义文件,但实际上这比它的价值更麻烦。第二个也使用maven程序集,但使用内置描述符。要使用第二个,只需将以下内容添加到 project -> build -> plugins pom中的部分:
project -> build -> plugins
<plugin> <artifactId>maven-assembly-plugin</artifactId> <version>2.4</version> <configuration> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> </configuration> </plugin>
现在,当您运行mvn包时,您将在目标文件夹中得到两个JAR: ${project.name}-${project.version}.jar -它只包含项目的类和资源 ${project.name}-${project.version}-jar-with-dependencies.jar -它将包含您的类/资源以及依赖树中的所有内容,范围是compile unpacked,并将其重新打包到单个jar中对于多入口点,您不需要做任何特定的操作,只需确保不定义 Main-Class jar清单中的条目(如果显式配置清单,否则默认值不会命名主类,所以应该是好的)
${project.name}-${project.version}.jar
${project.name}-${project.version}-jar-with-dependencies.jar
Main-Class
1条答案
按热度按时间dsekswqp1#
有两种方法可以创建具有依赖关系的jar:
hadoop支持jar格式的jar,这意味着您的jar包含jar的lib文件夹,这些jar将在提交作业和Map/减少任务执行时添加到类路径中
您可以将jar依赖项解压,并将它们与类一起重新打包到单个单片jar中。
第一种方法需要您创建一个maven程序集定义文件,但实际上这比它的价值更麻烦。第二个也使用maven程序集,但使用内置描述符。要使用第二个,只需将以下内容添加到
project -> build -> plugins
pom中的部分:现在,当您运行mvn包时,您将在目标文件夹中得到两个JAR:
${project.name}-${project.version}.jar
-它只包含项目的类和资源${project.name}-${project.version}-jar-with-dependencies.jar
-它将包含您的类/资源以及依赖树中的所有内容,范围是compile unpacked,并将其重新打包到单个jar中对于多入口点,您不需要做任何特定的操作,只需确保不定义
Main-Class
jar清单中的条目(如果显式配置清单,否则默认值不会命名主类,所以应该是好的)