如何在Linux上通过MPI运行Maven打包的Java Jar程序
问题原因
你遇到的报错由两个核心错误导致:
mpirun参数顺序错误:-np是mpirun的控制参数,必须放在执行命令前,你放在jar包路径后会被识别为Java程序的入参,不会生效- 打包未包含MPI依赖:你配置的
extdirs仅作用于编译期,打fat jar时没有将MPI相关类打入包中,运行时找不到mpi/MPI类
解决方案
方案1:修改打包配置,将MPI依赖打入Jar包(推荐)
- 首先移除pom中多余的lib目录resource配置,将本地lib下的
mpi.jar安装到Maven本地仓库,执行命令:
mvn install:install-file -Dfile=src/main/resources/lib/mpi.jar -DgroupId=org.openmpi -DartifactId=mpi -Dversion=4.1.1 -Dpackaging=jar
- 在pom的
dependencies节点添加MPI依赖:
<dependency> <groupId>org.openmpi</groupId> <artifactId>mpi</artifactId> <version>4.1.1</version> </dependency>
- 确认你使用的
maven-assembly-plugin配置正常,使用jar-with-dependencies描述符打包时会自动将所有依赖打入最终Jar包,重新执行mvn clean package得到新的fat jar。 - 执行正确的运行命令,若你的OpenMPI安装路径不是系统默认路径,需要提前指定本地库路径:
# 替换为你的OpenMPI lib路径、Jar包路径 LD_LIBRARY_PATH=/usr/local/openmpi-4.1.1/lib mpirun -np 4 java -jar xxx-1.0-SNAPSHOT-jar-with-dependencies.jar
方案2:运行时手动指定类路径(无需修改打包配置,适合临时测试)
不需要调整pom,直接运行时指定MPI依赖的路径,注意使用-cp参数时不能同时用-jar,需要显式指定主类全限定名:
# 替换为你的OpenMPI lib路径、mpi.jar路径、Jar包路径、主类全限定名 LD_LIBRARY_PATH=/usr/local/openmpi-4.1.1/lib mpirun -np 4 java -cp xxx-1.0-SNAPSHOT-jar-with-dependencies.jar:/path/to/mpi.jar com.xxx.YourMainClass
内容的提问来源于stack exchange,提问作者Siyuan Zhang
相关产品推荐
相关产品推荐

