JAR Maven项目依赖于没有依赖项的远程计算机

时间:2015-03-27 19:28:03

标签: java maven hadoop mapreduce

我是MavenJava的新手。我试图在远程计算机上运行hdfs MapReduce作业。我没有权限编写/编辑依赖项文件。我想知道是否有可能JAR我的Maven项目并将其传递给我的MapReduce作业。这样我就不需要SSH到远程机器并更改maven项目依赖项。我将使用包含远程计算机上未包含的所有必需依赖项的JAR来运行我的MapReduce作业。

1 个答案:

答案 0 :(得分:1)

您可以使用maven assembly plugin

执行此操作

将其添加到您的POM并进行相应配置(请参阅下面的示例)。

这将创建一个额外的jar,它包含从命令行运行jar所需的所有依赖项,并将使用main()方法标记该类(第二个想法,这可能是可选的,因为您可以在运行java -jar)时指定主类。

这是(我的MainJooqClass的一部分):

package sunshine.web.shaker.main;

// imports

public class MainJooqClass {

    public static void main(String[] args) {

        // code

    }

}

这是我的POM配置插件的部分:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

    <!-- ... -->

    <build>
        <plugins>

            <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>2.4.1</version>
                <configuration>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                    <archive>
                        <manifest>
                            <mainClass>sunshine.web.shaker.main.MainJooqClass</mainClass>
                        </manifest>
                    </archive>
                </configuration>
                <executions>
                    <execution>
                        <id>make-assembly</id>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

        </plugins>
    </build>

    <dependencies />

</project>