我有一个包含一些map reduce代码和一些命令行工具的jar。
要分发我的依赖项,我使用maven依赖插件将我所有的依赖包装在jar中的lib directoy中:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.3</version>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>prepare-package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/classes/lib</outputDirectory>
<overWriteReleases>false</overWriteReleases>
<overWriteSnapshots>false</overWriteSnapshots>
<overWriteIfNewer>true</overWriteIfNewer>
<excludeScope>provided</excludeScope>
</configuration>
</execution>
<execution>
<id>build-classpath</id>
<phase>generate-sources</phase>
<goals>
<goal>build-classpath</goal>
</goals>
<configuration>
configure the plugin here
</configuration>
</execution>
</executions>
</plugin>
当我从命令行运行各种类时,我希望我的jar使用lib目录java -cp myJar.jar org.mycompany.MyClass
然而,尽管我尽最大努力操纵MANIFEST.MF
,但这看起来并不起作用<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>./lib/</classpathPrefix>
<mainClass>com.mycompany.MainClass</mainClass>
</manifest>
</archive>
</configuration>
有没有办法在不使用maven-assembly-plugin的情况下执行此操作?
答案 0 :(得分:2)
我假设您正在谈论在map / reduce作业中使用这些依赖项。如果是这样,请看Pere Ferrera Bertran的this article,它解释了如何使用hadoop的分布式缓存(以及其他两种方式)来做到这一点