打包 java 项目到 linux 执行及问题小记

1,718 阅读2分钟

这是我参与8月更文挑战的第4天,活动详情查看:8月更文挑战

如果❤️我的文章有帮助,欢迎点赞、关注。这是对我继续技术创作最大的鼓励。更多往期文章在我的个人专栏

打包 java 项目到 linux 执行

故事的开始

由于 spark 的部署环境在服务器 (docker 部署) 上面, 所以导致网络映射特别复杂. 导致本地开发直连线上只能略过; 如果能本地机器也部署一套 spark + hadoop 还好, 可惜机器配置性能辣鸡, 部署完之后 磁盘io 满了(这是个悲伤的故事).

为什么我的眼中总是饱含热泪, 因为自己挖的坑 -- 含着泪也要坚强. 如果能重来, 我会选李白(直接在服务器装); 而现在只能打 jar 包上机器测试.

环境:

  • 本地开发 window 10
  • 服务器 Centos 7
  • jdk 版本 1.8
  • 打包工具 maven

项目打包

由于每一次打 jar 包, 如果直接执行 mvn package 就会在前一次基础上再次打包; 所以个人习惯 清除(mvn clean) 之后再打包 (mvn package)

# 清除
D:\Dev\workplace\java\spark_tag> mvn clean
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  0.228 s
[INFO] Finished at: 2021-08-04T21:09:54+08:00
[INFO] ------------------------------------------------------------------------

# 打包
D:\Dev\workplace\java\spark_tag>mvn package
[INFO] Scanning for projects...
[INFO] --- maven-jar-plugin:3.1.0:jar (default-jar) @ spark_tag ---
[INFO] Building jar: D:\Dev\workplace\java\spark_tag\target\spark_tag-1.0-SNAPSHOT.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  1.723 s
[INFO] Finished at: 2021-08-04T21:12:35+08:00
[INFO] ------------------------------------------------------------------------

打包完成过后, 你就可以在 上面 Building jar 路径下得到项目 jar 包. rz 上传至 Centos 服务器即可执行

# 语法 java -cp 包地址 程序路径 参数 
java -cp spark_tag-1.0-SNAPSHOT.jar com.sparktag.etl.HotWordEtl

执行时, 我曾遇到问题

问题: Error: Could not find or load main class

Linux下执行jar包提示错误: 找不到或无法加载主类

可能的解决办法 一:

将当前目录加入系统变量 CLASSPATHlinux 系统 才能找到当前目录下的 Java 类, vi /etc/profile ,按照将 jar 包的目录 加到 PATH中,保存后退出 source /etc/profile 让文件生效。

$ vi /etc/profile

# 配置文件
# /etc/profile

#set java environment
JAVA_HOME=/usr/lib/jvm/jre-1.6.0-openjdk.x86_64
PATH=$PATH:$JAVA_HOME/bin
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME CLASSPATH PATH

# 程序执行目录
export PATH=$PATH:/work/apps/spark-es-tag

# 重新加载, 让配置生效
$ source /etc/profile

# 验证配置
$ echo $PATH
/usr/local/bin:/usr/bin:/usr/lib/jvm/jre-1.6.0-openjdk.x86_64/bin:/work/apps/spark-es-tag:/usr/local/sbin:/usr/sbin:/work/servers/php/bin:/home/work/.local/bin:/home/work/bin:/work/servers/python/python3.7/bin

可能的解决办法 二:

在原 清除之后再打包 过程中, 加入 mvn compile (编译) 查看编译过程是否出现报错. 确认无误之后再打包上传