将java程序打包成rpm包,具体操作?

在centos7环境下 将java程序打包成rpm包,具体应该如何操作呢?求大神指教,详情请加一下我Q:1228601870

步骤一:准备工作

(1)rpm打包需要特定的目录,创建该目录的命令如下:

mkdir -pv ~/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS}
(2)接下来需要对rpm进行配置,命令如下:

echo ~/rpmbuild > ~/.rpmmacros
该命令将"~/rpmbuild"作为rpm打包目录

步骤二:准备程序源代码文件以及spec文件

(1)新建程序源代码文件(文件名为:hello.c)

复制代码
#include

int main()

{

printf("Hello, World!\n");

return 0;

}
复制代码
(2)新建.spec文件(文件名为:hello.spec)

复制代码
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root

不明白这样定义啥意思

Summary: hello world rpm package

Name: hello

Version: 0.1

Release: 1

Source: hello-0.1.tar.gz

License: GPL

Packager: wangdonglei

Group: Application

%description

This is a simple example for rpm package!

%prep

%setup -q

%build

gcc -o hello hello.c

%install

mkdir -p %{buildroot}/usr/local/bin

install -m 755 hello %{buildroot}/usr/local/bin/hello

%files

这里的路径是在buildroot虚拟根基础上的,即%{buildroot}/%{name}-%{version}-%{release}-root/usr/local/bin/hello

/usr/local/bin/hello
复制代码
(3)通过下面的命令将程序源代码文件以及.spec文件放入相应位置

将hello.c放入目录hello-0.1并打包该目录

tar zcvf hello-0.1.tar.gz hello-0.1

将hello-0.1.tar.gz 放入SOURCES下

mv hello-0.1.tar.gz /root/rpmbuild/SOURCES
(4)打包

rpm -ba rpmbuild/SPECS/hello.spec
执行打包命令后,系统运行hello.spec文件的内容,最终生成两个文件,一个包含源码的rpm包和一个二进制rpm包。

rpmbuild/SRPMS/hello-0.1-1.src.rpm
rpmbuild/RPMS/i386/hello-0.1-1.i386.rpm

这个案例虽然是针对C/C++的,但是打包java程序的思路是一样

【未完待续】

============此处贴一些当时看过的相关文章,后面有时间了我再整理当时自己的实现过程===========

一些命令

http://www.worldhello.net/2011/04/02/2405.html

上文提供了一些命令来查看系统默认的打包目录,介绍了如何自定义打包目录等 ,通过这篇文章,对rpm打包的理解会更深入一些

rpm简单介绍

http://blog.chinaunix.net/uid-7530389-id-2050100.html

%install部分使用的是绝对路径,而%file部分使用则是相对路径,虽然其描述的是同一个地方

系统中的一些信息

/usr/lib/rpm/marcros,通过cat命令查看

简单介绍

http://blog.sina.com.cn/s/blog_5d867af101019b7i.html

明白可通过不同方式构建rpm包,目前只关注从spec文档建包

rpmbuild命令的基本格式:rpmbuild [options] [spec文档|tarball包|源码包]

RPM的一些用法:

查询功能:

1、对系统中已经安装的软件查询:rpm -q softwarename

2、查询系统中已安装的包:rpm -qa [softwarename]

3、查询已安装软件包都安装到何处:rpm -ql softwarename

安装,删除 rpm -ivh softwarename.rpm rpm -e softwarename

先编译成成jar包,然后利用fpm工具打包成rpm包。

在pom文件设置打包方式

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>2.3.2</version>
            <configuration>
                <source>1.6</source>
                <target>1.6</target>
                <encoding>${project.build.sourceEncoding}</encoding>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.mortbay.jetty</groupId>
            <artifactId>maven-jetty-plugin</artifactId>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <version>2.3.2</version>
            <configuration>
                <excludes>
                    <exclude>*.properties</exclude>
                </excludes>
                <archive>
                    <manifest>
                        <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
                        <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
                        <addClasspath>true</addClasspath>
                        <classpathPrefix>../lib/</classpathPrefix>
                        <mainClass>ayy.openair.Booter</mainClass>
                    </manifest>
                    <manifestEntries>
                        <Class-Path>../conf/</Class-Path>
                    </manifestEntries>
                </archive>
            </configuration>
        </plugin>

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-assembly-plugin</artifactId>
            <configuration>
                <descriptors>
                    <descriptor>src/main/assemble/assembly.xml</descriptor>
                </descriptors>
                <finalName>${project.artifactId}</finalName>
            </configuration>
            <executions>
                <execution>
                    <id>make-assembly</id>
                    <phase>install</phase>
                    <goals>
                        <goal>single</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>

在制作RPM安装包的时候一般来讲有两种方式

1.使用RPMBUILD
使用RPMBUILD需要自己编写*.spec文件
2.使用CMake自带的CPack工具
由于本人负责的项目都是使用CMake作为构建工具,所以优先考虑使有CPack作为打包工具

在使用CMake自带的CPack作为打包工具需要注意的问题:

1.在使用make package 之前一定要确保make install可以正确工作,也就是说,要保证make install的目标树是正确的。
2.设置make install的安装路径

set(CMAKE_INSTALL_PREFIX path)
1
3.设置RPM包的默认安装路径

set(CPACK_PACKAGING_INSTALL_PREFIX path)
1
4.设置是否允许在安装RPM包时重新指定安装目录

set(CPACK_SET_DESTDIR false)
1
false 表示不使用DESTDIR mechanism