将java的jar包,打包为rpm 安装包
一、rpm包 介绍
RPM Package Manager (RPM) 是一个强大的命令行驱动的软件包管理工具,用来安装、卸载、校验、查询和更新 Linux 系统上的软件包
二、环境安装
- 一台centos7系统
- 准备一个spring boot 项目jar 包 ,举个栗子:spring-starter-test-0.1.0.jar
- 开始安装依赖工具包
- 1、rpmbuild-用于生成rpm的实用程序
- 2、rpmdev-开发实用程序以生成rpm。
- 3、rpmlint-用于检查rpm包中常见错误的工具。
[root@localhost ~]# sudo yum install rpm-build
Loaded plugins: fastestmirror, langpacks
base | 3.6 kB 00:00:00
extras | 2.9 kB 00:00:00
updates | 2.9 kB 00:00:00
Loading mirror speeds from cached hostfile
* base: mirror.bit.edu.cn
* extras: mirrors.huaweicloud.com
* updates: mirror.bit.edu.cn
Resolving Dependencies
--> Running transaction check
---> Package rpm-build.x86_64 0:4.11.3-43.el7 will be installed
--> Processing Dependency: rpm = 4.11.3-43.el7 for package: rpm-build-4.11.3-43.el7.x86_64
--> Processing Dependency: system-rpm-config for package: rpm-build-4.11.3-43.el7.x86_64
--> Processing Dependency: perl(Thread::Queue) for package: rpm-build-4.11.3-43.el7.x86_64
--> Running transaction check
************************************************************
Installed:
rpm-build.x86_64 0:4.11.3-43.el7
Dependency Installed:
dwz.x86_64 0:0.11-3.el7 perl-Thread-Queue.noarch 0:3.02-2.el7 perl-srpm-macros.noarch 0:1-8.el7 python-srpm-macros.noarch 0:3-32.el7 redhat-rpm-config.noarch 0:9.1.0-88.el7.centos
Dependency Updated:
rpm.x86_64 0:4.11.3-43.el7 rpm-build-libs.x86_64 0:4.11.3-43.el7 rpm-libs.x86_64 0:4.11.3-43.el7 rpm-python.x86_64 0:4.11.3-43.el7
Complete!
[root@localhost ~]# sudo yum install rpmdevtools
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: mirror.bit.edu.cn
* extras: mirrors.huaweicloud.com
* updates: mirror.bit.edu.cn
Resolving Dependencies
--> Running transaction check
---> Package rpmdevtools.noarch 0:8.3-5.el7 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
==============================================================================================================================================================================================================
Package Arch Version Repository Size
==============================================================================================================================================================================================================
Installing:
rpmdevtools noarch 8.3-5.el7 base 97 k
Transaction Summary
==============================================================================================================================================================================================================
Install 1 Package
Total download size: 97 k
Installed size: 209 k
Is this ok [y/d/N]: y
Downloading packages:
rpmdevtools-8.3-5.el7.noarch.rpm | 97 kB 00:00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Installing : rpmdevtools-8.3-5.el7.noarch 1/1
Verifying : rpmdevtools-8.3-5.el7.noarch 1/1
Installed:
rpmdevtools.noarch 0:8.3-5.el7
Complete!
[root@localhost ~]# sudo yum install rpmlint
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: mirror.bit.edu.cn
* extras: mirrors.huaweicloud.com
* updates: mirror.bit.edu.cn
Resolving Dependencies
--> Running transaction check
---> Package rpmlint.noarch 0:1.5-4.el7 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
==============================================================================================================================================================================================================================================================================
Package Arch Version Repository Size
==============================================================================================================================================================================================================================================================================
Installing:
rpmlint noarch 1.5-4.el7 base 229 k
Transaction Summary
==============================================================================================================================================================================================================================================================================
Install 1 Package
Total download size: 229 k
Installed size: 1.2 M
Is this ok [y/d/N]: y
Downloading packages:
rpmlint-1.5-4.el7.noarch.rpm | 229 kB 00:00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Installing : rpmlint-1.5-4.el7.noarch 1/1
Verifying : rpmlint-1.5-4.el7.noarch 1/1
Installed:
rpmlint.noarch 0:1.5-4.el7
Complete!
- 安装完成!
三、项目设置
1、创建初始rpm文件夹结构。
[root@localhost ~]# cd ~; mkdir rpmbuild; cd ~/rpmbuild; rpmdev-setuptree
[root@localhost rpmbuild]# pwd
/root/rpmbuild
[root@localhost rpmbuild]#
2、将jar项目文件包文件复制到源文件夹中。
[root@localhost ~]# cp /root/package/spring-starter-test-0.1.0.jar SOURCES/
注意:示例服务将由systemd管理,因此我们还必须将服务文件打包到rpm中。
创建vim SOURCES/spring-starter-test.service具有以下内容的文件:
[root@localhost rpmbuild]# ll
total 0
drwxr-xr-x. 2 root root 6 Aug 6 03:35 BUILD
drwxr-xr-x. 2 root root 6 Aug 6 03:35 RPMS
drwxr-xr-x. 2 root root 6 Aug 6 03:35 SOURCES
drwxr-xr-x. 2 root root 6 Aug 6 03:35 SPECS
drwxr-xr-x. 2 root root 6 Aug 6 03:35 SRPMS
[root@localhost rpmbuild]# vim SOURCES/spring-starter-test.service
文件内容为:
[Unit]
Description=Spring Starter
After=network-online.target
[Service]
Type=simple
WorkingDirectory=/var/opt/spring-starter-test
ExecStart=/usr/bin/java -jar /usr/local/spring-starter-test/spring-starter-test.jar
Restart=on-abort
User=spring-starter
Group=spring-starter
[Install]
WantedBy=multi-user.targe
四、开始编写规范文件
规范文件定义了rpm构建过程和安装过程。
为我们的spring starter应用程序创建一个规范文件。
[root@localhost rpmbuild]# vim SPECS/spring-starter-test.spec
并设置以下内容:
##### HEADER SECTION #####
Name: spring-starter-test
Version: 0.1.0
Release: 0
Summary: Rpm package for Spring Starter
License: ASL 2.0
URL: https://spring.io
Source0: spring-starter-test-%{version}.jar
Source1: %{name}.service
Requires: shadow-utils,bash
BuildRequires: systemd
%{?systemd_requires}
BuildArch: noarch
%description
%{summary}
# disable debuginfo, which is useless on binary-only packages
%define debug_package %{nil}
# do not repack jar files
%define __jar_repack %{nil}
##### PREPARATION SECTION #####
%prep
# empty section
##### BUILD SECTION #####
%build
# empty section
##### PREINSTALL SECTION #####
%pre
# create Spring Starter service group
getent group spring-starter >/dev/null || groupadd -f -g 30000 -r spring-starter
# create Spring Starter service user
if ! getent passwd spring-starter >/dev/null ; then
if ! getent passwd 30000 >/dev/null ; then
useradd -r -u 30000 -g spring-starter -d /home/spring-starter -s /sbin/nologin -c "Spring Starter service account" spring-starter
else
useradd -r -g spring-starter -d /home/spring-starter -s /sbin/nologin -c "Spring Starter service account" spring-starter
fi
fi
exit 0
##### INSTALL SECTION #####
%install
app_dir=%{buildroot}/usr/local/spring-starter-test
data_dir=%{buildroot}/var/opt/spring-starter-test
service_dir=%{buildroot}/%{_unitdir}
# cleanup build root
rm -rf %{buildroot}
mkdir -p %{buildroot}
# create app folder
mkdir -p $app_dir
# create data folder
mkdir -p $data_dir
# create service folder
mkdir -p $service_dir
# copy all files
cp %{SOURCE0} $app_dir/spring-starter-test.jar
cp %{SOURCE1} $service_dir
##### FILES SECTION #####
%files
# define default file attributes
%defattr(-,spring-starter,spring-starter,-)
# list of directories that are packaged
%dir /usr/local/spring-starter-test
%dir %attr(660, -, -) /var/opt/spring-starter-test
# list of files that are packaged
/usr/local/spring-starter/spring-starter-test.jar
/usr/lib/systemd/system/%{name}.service
##### POST INSTALL SECTION #####
%post
# ensure Spring Starter service is enabled and running
%systemd_post %{name}.service
%{_bindir}/systemctl enable %{name}.service
%{_bindir}/systemctl start %{name}.service
##### UNINSTALL SECTION #####
%preun
# ensure Spring Starter service is disabled and stopped
%systemd_preun %{name}.service
%postun
case "$1" in
0) # This is a package remove
# remove app and data folders
rm -rf /usr/local/spring-starter-test
rm -rf /var/opt/spring-starter-test
# remove Spring Starter service user and group
userdel spring-starter
;;
1) # This is a package upgrade
# do nothing
;;
esac
# ensure Spring Starter service restartet if an upgrade is performed
%systemd_postun_with_restart %{name}.service
##### CHANGELOG SECTION #####
%changelog
* August 6, 2020 date liuxd <liuxd1314@sina.com> - 0.1.0-0
- First spring-starter-test package
- 此处有一个注意点是:%define __jar_repack %{nil}定义。此选项禁用.jar文件压缩。如果jar文件被压缩,它将变得无法执行。
五、开始构建进行运行
- 构建
开始验证文件内容正确性
# Rpmlint之后会有很多错误及警告,大多数警告可以忽略。
[root@localhost rpmbuild]# rpmbuild -ba SPECS/spring-starter.spec
- 正式开始构建
[root@localhost rpmbuild]# rpmbuild -ba SPECS/spring-starter-test.spec
- 命令说明:
1、 完全打包
rpmbuild -ba xxx.spe
2、只需要生成完整的源文件
rpmbuild -bp xxx.spec - 已经完成打包,我们开始安装成果
#生成后的安装包是在: RPMS/noarch/spring-starter-test-0.1.0-0.noarch.rpm
[root@localhost noarch]# pwd
/root/rpmbuild/RPMS/noarch/spring-starter-test-0.1.0-0.noarch.rpm
[root@localhost rpmbuild]# rpm -ivh RPMS/noarch/spring-starter-test-0.1.0-0.noarch.rpm
六、安装完成,我们可以开始访问项目接口了
[root@localhost rpmbuild]# systemctl status spring-starter-test
[root@localhost rpmbuild]# curl http://127.0.0.1:8080/test/user/login?username=test001&password=123456
******************
将java的jar包,打包为rpm 安装包的更多相关文章
- java 执行 jar 包中的 main 方法
java 执行 jar 包中的 main 方法 通过 OneJar 或 Maven 打包后 jar 文件,用命令: java -jar ****.jar执行后总是运行指定的主方法,如果 jar 中有多 ...
- Java常用jar包用途
Java常用jar包用途: USAGE INDEX JAR NAME USAGE 1 ASM asm-2.2.3.jar ASM字节码库 2 ASM asm-commons-2.2.3.jar ASM ...
- (转)java 从jar包中读取资源文件
(转)java 从jar包中读取资源文件 博客分类: java 源自:http://blog.csdn.net/b_h_l/article/details/7767829 在代码中读取一些资源文件 ...
- 杂项-Java:jar 包与 war 包介绍与区别
ylbtech-杂项-Java:jar 包与 war 包介绍与区别 1.返回顶部 1. 做Java开发,jar包和war包接触的挺多的,有必要对它们做一个深入的了解,特总结整理如下: 1.jar包的介 ...
- 将java打jar包成linux后台服务service
将java打jar包成linux后台服务service 第一步:将java程序打成jar包 build.gradle配置文件中加spring-boot-gradle-plugin插件,具体配置如下(配 ...
- build path libraries java基础--Jar包添加到build path方式说明--01
摘自: http://blog.csdn.net/haolongabc/article/details/7007701 java基础--Jar包添加到build path方式说明--01 前言:这段短 ...
- jar包打包成exe示例(基于maven项目)
jar包打包成exe示例(基于maven项目) 说明 针对基于maven的Java项目,通常会打包成jar, 如果要把jar文件包装成exe文件,仅需要在pom.xml配置文件中增加一个插件即可 这里 ...
- jmeter接口测试-调用java的jar包-csv参数化请求-BeanShellPreProcessor生成验签作为请求验证参数-中文乱码----实战
背景及思路: 需求:要做 创建新卡 接口的测试,要求: 1. 不需要每次手动修改请求参数. 方案:文中先用excle将数据准备好,导出为csv格式,再用jmeter的csv请求进行参数化 2. 卡号需 ...
- java打jar包和运行jar包的两种方式
java打jar包和运行jar包的两种方式更详细的打包方式请参考https://www.cnblogs.com/mq0036/p/8566427.html 一.java类不依赖第三方jar包以简单的一 ...
随机推荐
- l洛谷 P6030 [SDOI2012]走迷宫 概率与期望+高斯消元
题目描述 传送门 分析 首先判掉 \(INF\) 的情况 第一种情况就是不能从 \(s\) 走到 \(t\) 第二种情况就是从 \(s\) 出发走到了出度为 \(0\) 的点,这样就再也走不到 \(t ...
- 《Java从入门到失业》第四章:类和对象(4.6):类路径
4.6类路径 4.6.1什么是类路径 前面我们讨论过包,知道字节码文件最终都会被放到和包名相匹配的树状结构子目录中.例如上一节的例子: 其实类还有一种存放方式,就是可以归档到一个jar文件中,jar文 ...
- hadoop分布式格式化时出现异常java.net.unknownhostexception
当搭建好分布式集群后,准备使用命令格式化时 hdfs namenode format 在日志的最后一行出现 java.net.unknownhostexception的异常,通常是你的主机名没有配置好 ...
- Python对象的空间边界:独善其身与开放包容
导读:Python猫是一只喵星来客,它爱地球的一切,特别爱优雅而无所不能的 Python.我是它的人类朋友豌豆花下猫,被授权润色与发表它的文章.如果你是第一次看到这个系列文章,那我强烈建议,请先看看它 ...
- ThinkPHP 5 生命周期
前段时间用TP5开发了一个小程序,就熟悉了一下TP5.TP5是TP框架最新的一个版本,与以前的3还是有很大的区别,有人说和laravel比较靠近,其实也还好,每个人都有自己不同的看法,只要是选择一个自 ...
- 中部:执具 | R语言数据分析(北京邮电大学)自整理笔记
第5章工欲善其事.必先利其器 代码,是延伸我们思想最好的工具. 第6章基础编程--用别人的包和函数讲述自己的故事 6.1编程环境 1.R语言的三段论 大前提:计算机语言程序=算法+数据结构 小前提:R ...
- milvus和faiss安装及其使用教程
写在前面 高性能向量检索库(milvus & faiss)简介 Milvus和Faiss都是高性能向量检索库,可以让你在海量向量库中快速检索到和目标向量最相似的若干个向量,这里相似度量标准可以 ...
- CentOS 7安装Nginx 1.10.2
安装epel-release源并进行安装 yum install epel-release yum update(时间会有点长) yum install nginx 相关操作: systemctl s ...
- 【题解】【POI2000】病毒
题目链接 这题让我们构造一个无限长的,不包括给定字符串的01串. 把给定字符串放到\(AC\)自动机上,在结尾处打上标记. 发现,如果我们要构造一个无限长的串,必然要有一个环. 那么这个环上就一定不能 ...
- JavaScript事件对象属性e.target和this的区别
前言: Event对象代表事件的状态,比如事件在其中发生的元素.键盘按键的状态.鼠标的位置.鼠标按钮的状态. 事件发生后,跟事件相关的一系列信息数据的集合都放到这个对象里面,这个对象就是事件对象eve ...