【问题标题】:JAR Maven project with dependencies on remote machine without dependenciesJAR Maven 项目在没有依赖关系的远程机器上具有依赖关系
【发布时间】:2015-03-27 19:28:02
【问题描述】:

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

【问题讨论】:

    标签: java maven hadoop mapreduce


    【解决方案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>
    

    【讨论】:

    • 我是否将 fully-qualified-main 替换为包含 main 的类的名称?我只是浏览了文档,但我仍然遇到问题
    • @Liondancer 是的,你必须这样做。我已经改进了答案中的示例。
    猜你喜欢
    • 1970-01-01
    • 2012-05-30
    • 2015-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-09
    • 2011-04-14
    • 2012-07-04
    相关资源
    最近更新 更多