Linux与Java:二进制打包 (linux java 打包二进制)

作为两个广泛使用的开源技术,Linux和Java在软件开发领域拥有着广泛的应用。而二进制打包则是Linux和Java开发者不可或缺的一个技能,特别是在今天不断变化的IT环境中,迅速交付和部署软件是至关重要的。

本文将深入探讨Linux与Java开发中的二进制打包技术,包括其定义、作用、相关工具和使用步骤。

一、 什么是二进制打包?

二进制打包是将程序源代码编译成可执行文件的过程。打包器将程序源代码通过编译器编译成机器语言,生成二进制文件,可能包括可执行文件、静态库、动态库等等。一个好的打包器应该能够完整地收集处理程序所依赖的第三方库,并生成可运行的包,而这些包可以在系统中直接运行。

二、 为什么要进行二进制打包?

在软件开发的过程中,二进制打包有以下几个显著的优点:

1. 加速软件开发过程:在进行软件开发时,程序员往往会花费很长的时间去解决第三方库的问题。通过使用二进制打包,在开发阶段,可以节省大量的时间,使软件开发更快速、更有效率。

2. 保护源代码:在一些代码需要加密或保护的场合下,二进制打包可以起到很好的保护源代码的作用。

3. 程序安装及更新:二进制打包可以方便程序的安装和增量更新,对于不同版本的软件包,打包器也可以保证程序不会冲突。

三、 Linux中的二进制打包

1. RPM包管理

RPM包是常见的Linux二进制格式之一,它是由Red Hat公司创建并已成为Linux社区广泛使用的一种打包方式。使用RPM包管理器,可以方便地查看、安装和卸载已经打包好的软件,缩短了配置和安装时间。

2. Debian包管理

与RPM相似的还有Debian包,它是Debian操作系统所采用的apk方式。利用Debian包,用户可以很方便地在Debian环境中安装和管理软件,而且Debian包也可以跨多个发行版使用。

3. tarball打包

在Linux中,tarball通常意味着一个tar归档文件,它可以用于将多个文件和目录打包成一个文件,这样可使程序员打包依赖的第三方库,解压即可恢复部分工作区间,也可以方便地通过网络分发。

四、 Java中的二进制打包

Java本身是编译成字节码的,一般可以跨平台使用,在不同的发行版之间不会出现兼容性问题。Java二进制打包的优点在于如果使用其他编译语言编写的应用程序,Java可以使用JNI(Java Native Interface)来调用它们的功能。

在Java开发中,有以下几种常见的工具来进行二进制打包:

1. Maven

Maven是Java的一个构建自动化工具,它能实现软件的自动化构建和依赖管理。依赖管理是面向对象领域中非常重要的问题,Maven可以帮我们自动处理依赖,同时也可以帮我们打包。

2. Gradle

Gradle是另一种Java文件自动化构建工具,结合了Maven和Ant两种工具的优点,并且速度很快。它可以处理各种不同的构建任务,比如Java、C++、Python等语言的项目。

在现代软件开发中,二进制打包技术已经成为开发者不可或缺的一个技能。它可以大大加快开发效率,保护源代码,并方便程序的安装和增量更新。在Linux和Java开发中,我们可以使用RPM包管理、Debian包管理、tarball打包、Maven和Gradle等工具来进行二进制打包,以满足不同的需求。

相关问题拓展阅读:

如何把java 应用 制作成docker镜像

初次安装部署好docker后,大多数镜像可以从DockerHub提取,但是大多数人都希望自己可以完全自定义一个镜像,那么这里需要一个第三方工具febootstrap  epel6的源提供febootstrap的RPM包  yuminstalldocker-iofebootstrap-y  servicedockerstart  chkconfigdocker–level35on复制代码  制作CentOS6.6镜像目录  febootstrap-iyum-iiputils-iiproute-ibash-ivim-minimal-icoreutils-itar-inet-toolscentos6base  /centos/6.6/updates/x86_64/复制代码  -i表示镜像里面安装的RPM包(包括一些人为有必要的软件包)  centos6表示镜像的版本说明  base表示生成的镜像目录  后面之后了系统安装源和更新源为USTC  安装执行后,会开始一系列的RPM包下载安装,过程与yum类似,安装完成后当前目录会多了base目录,里面就是一个镜像的系统文件  进入base目录等于进入镜像的根目录  #cdbase/  #ls  binbootdevetchomeliblib64mediamntoptprocrootinselinuxsrvsystmpusrvar复制代码  可以像一般的系统文件一样先做一些修改配置,例如配置第三方yum源等等  把base目录把所有文件打包成二进制文件后导入docker创建为镜像  cd~/root/base/&&tar-c.|dockerimport-centos6:base复制代码  dockerimages可以查看镜像的信息  一个基本centos镜像创建完毕,下面再利用Dokcerfile制作mysql镜像  catDockerfile  FROMcentos6:base  MAINTAINERLion””  VOLUME/var/lib/mysql  RUNyuminstallmysql-servermysql-y  RUNecho-ne”NETWORKING=yes\\nHOSTNAME=mysql”>/etc/sysconfig/network  RUNecho-ne”bind-address=0.0.0.0\\ndefault-storage-engine=innodb\郑尘\ninnodb_file_per_table\\n\collation-server=utf8_general_ci\\ninit-connect=’SETNAMESutf8’\\ncharacter-set-server=utf8″>insert  RUNsed-i”/user=mysql/rinsert”/etc/my.cnf&&rm-finsert  RUNecho-ne”/usr/bin/mysql_install_db\\n/usr/bin/mysqld_safe”>>/opt/mysql_start  RUNchmod777/opt/mysql_start  ENVPATH/usr/local/in:/usr/local/bin:/in:/bin:/usr/in:/usr/bin:  WORKDIR/opt  EXPOSE3306  CMD/bin/sh-cmysql_start复制代码  FROM声明以centos:base镜像为基础  MAINTAINER声明镜像的维护者信息  VOLUME挂载本地目录到容器里/var/lib/档丛携mysql目录(这是mysql默认的数据保存目录)  由于我希望数据可以持久化防止因为容器误删除而丢失,所以映射到宿主本地目录  RUN在镜像中执行安装mysql  在新镜像中写入HOSTNAME信息,因为mysql启动过程需要network文件  在my.cnf配置文件插入一些修改配置  创建启动脚本  声明环境变量  制定默认工作目录  EXPOSE声明容器需要暴露行伏的端口号  CMD是指镜像生成容器后自动执行的命令,类似dockerexec,这里是自动启动mysql服务  根据Dockerfile创建mysql服务镜像  dockerbuild–rm=true-tmysql:frist.  查看镜像的树状关系可以发现,mysql:frist是以centos:base为父镜像

利用Dockerfile构建一个简单的java应用镜像,依赖环境比较简单,JDK,定制化的Tomcat(名为star-appserver)

1、环境准备

ubuntu:14.04

docker : 1.4

jdk:jdk-8u31-linux-x64.gz

tomcat : 7.0(star-appserver)

在/usr/local下创建目录:s,将jdk-8u31-linux-x64.gz和star-appserver(此处为了简单,已包含应用)拷贝到此目录下,由于Docker在构建镜像时宏隐,需将Dockerfile所在目录传给Docker daemon作为构建上下文,所以此目录下应包含构建时所依赖的各种环境。

2、环境准备好后,在s下创建Dockerfile(名字必须为Dockerfile)文件,内容如下

FROM ubuntu:latest

MAINTAINER zhangjy

#install JDK and TOMCAT

ADD jdk-8u31-linux-x64.gz /usr/local/

ADD tomcat /usr/local/ #tomcat下为star-appserver,如果直接复制star-appserver,只会复制目录里边的内容,不会复制目录本身

ADD timezone /etc/

#启动脚本,用于从镜像启动容器时调用执行,见下面的ENTRYPOINT

ADD onStart.sh /usr/local/

ENV JAVA_HOME=/usr/local/jdk1.8.0_31 CLASSPATH=$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar PATH=$PATH:$JAVA_HOME/bin

RUN echo “JAVA_HOME=/usr/local/jdk1.8.0_31\nCALSSPATH=$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar\nPATH=$PATH:$JAVA_HOME/bin” >> /etc/profile

#start tomcat

ENTRYPOINT

3、在s下创建onStart.sh,并赋予执行权限,用于启动tomcat并输出日志(为了保证容器中有执行状清绝罩态的进程,否则容器停止)

#!/bin/bash

/usr/local/star-appserver/bin/startup.sh

tail -f /usr/local/star-appserver/logs/stariboss.log

4、在s下执行命令,创建成答闹功

$docker build -t zhangjy/stars:v1 .

启动时,发现应用访问数据库报错:ORA-01882: timezone region not found,原因是JVM默认使用Ubuntu的/etc/timezone里配置的时区,查看timezone时区为Etc/UTC,再查看ORACLE数据库支持的时区:select * from V$TIMEZONE_NAMES发现没有,于是又在s目录下创建了一个timezone文件,将时区配置成Asia/Shanghai,在Dockerfile中加入到镜像/etc/目录下

Dockerfile文件配置说明:

FROM

表明基于哪个镜像创建

MAINTAINER

作者和邮箱

ADD

将目录或文件加入到镜像的某个目录,格式是ADD

RUN

有两种格式:

RUN (the command is run in a shell – /bin/sh -c – shell form)

RUN (exec form)

默认RUN后的命令是在/bin/sh下执行,像Ubuntu默认/bin/sh是指向/bin/dash,如果想使用/bin/bash,则可按如下方式

RUN

但需注意,这种方式不能解析类似于$HOME的参数引用

ENV

设置环境变量,在镜像构建过程中和容器启动后均有效

CMD

CMD在容器运行的时候提供一些命令及参数,用法如下:

CMD (exec form, this is the preferred form) CMD (as default parameters to ENTRYPOINT) CMD command param1 param2 (shell form)

– 之一种用法:运行一个可执行的文件并提供参数。

– 第二种用法:为ENTRYPOINT指定参数,即为ENTRYPOINT指定命令的默认参数,通过docker run命令传过来的参数会将其覆盖

– 第三种用法(shell form):是以”/bin/sh -c”的方法执行的命令。

如指定:

1. CMD

build后运行(假设镜像名为ec):

1. docker run ec

就会输出: this is a echo test

注意:如果在docker run命令后指定命令,如docker run ec echo ‘test’,会将CMD的命令覆盖。CMD的命令不能接收run传过来的参数,而ENTRYPOINT可以

ENTRYPOINT

有两种用法

ENTRYPOINT (the preferred exec form)

ENTRYPOINT command param1 param2 (shell form)

linux java 打包二进制的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于linux java 打包二进制,Linux与Java:二进制打包,如何把java 应用 制作成docker镜像的信息别忘了在本站进行查找喔。


数据运维技术 » Linux与Java:二进制打包 (linux java 打包二进制)