有些时候,需要将java程序双击就可以运行的jar文件,如果用手工打包会比较痛苦(尤其是包含有第三方的jar时),这里介绍一个快捷的方式:用FatJar实现。

 

1、下载、配置。

fatjar是Eclipse的一个插件,下载后配置到eclipse中即可。

下载地址:http://downloads.sourceforge.net/fjep/net.sf.fjep.fatjar_0.0.27.zip?modtime=1195824818&big_mirror=0

在线安装地址:http://kurucz-grafika.de/fatjar

配置好重新启动eclipse,在“首选项”可发现“Fat Jar Prefreence”,表示安装成功。

 

 

2、生成可运行jar:

 

选中一个项目,右键选择“build fat jar”探出对话框,"jar-name"、“Main-Class”必须填写。

完成后“下一步”,

选择需要到处的资源(一般全选择)

 

选好后,点击“完成”生成jar文件。

用rar打开文件可以看到第三方的库也一并打入了包中。

 

ok,现在运行“java -jar xxx.jar”可以看到结果了。

 

3、在windows、linux下执行

(假定我们打包后的文件名称是resourceMonitor.jar,主类是job.StartUp,并且需要一个sigar-x86-winnt.dll库支持)

a、在windows下:

新建runResourceMonitor.bat文件,和resourceMonitor.jar同目录,内容如下:

Java代码  收藏代码
  1. @echo off  
  2. echo 正在执行,请稍等......  
  3. @rem start "Ecode App Server Monitor v1.0" java -jar resourceMonitor.jar  
  4. start "Ecode App Server Monitor v1.0" java -classpath .\resourceMonitor.jar;.\dll\sigar-x86-winnt.dll job.StartUp  
  5. echo 执行完成!  
  6.   
  7. @rem pause  

 拷贝sigar-x86-winnt.dll,和resourceMonitor.jar同目录。

最后的目录结构:

 

双击“runResourceMonitor.bat”即可启动服务。

 

b、在linux下运行

 

linux和windows有所不同,主要表现在对lib库位置的读取上。win下直接放在jar同目录下即可自动找到,但是linux下需要指定LD_LIBRARY_PATH的位置。关于LD_LIBRARY_PATH可以看本文后面的知识点。

方法是:

在resourceMonitor.jar所在目录下创建run.sh,内容如下:(nohup是后台执行命令,关于nohup可以看本文后面的知识点。)

Java代码  收藏代码
  1. export LD_LIBRARY_PATH=./so:$LD_LIBRARY_PATH  
  2. nohup java -cp resourceMonitor.jar job.StartUp &  

然后在当前目录下创建so文件夹,并拷贝所需动态链接文件“libsigar-x86-linux.so”到该目录。

最后的目录结构:

 

 

现在进入对应目录执行run.sh 即可。注意chmod一下。

 

ok,大功告成。

 

 

 

===================linux小知识=======================

 

关于LD_LIBRARY_PATH的小知识:

定义 
  Linux环境变量名,该环境变量主要用于指定查找共享库(动态链接库)时除了默认路径之外的其他路径。(该路径在默认路径之前查找)
  移植程序时的经常碰到需要使用一些特定的动态库,而这些编译好的动态库放在我们自己建立的目录里,这时可以将这些目录设置到LD_LIBRARY_PATH中。
编辑本段示例
  当执行函数动态链接.so时,如果此文件不在缺省目录下‘/usr/local/lib’ and ‘/usr/lib’.
  那么就需要指定环境变量LD_LIBRARY_PATH
  假如现在需要在已有的环境变量上添加新的路径名,则采用如下方式:
  LD_LIBRARY_PATH=NEWDIRS:$LD_LIBRARY_PATH.(newdirs是新的路径串)
  (注:GNU系统可以自动添加在 /etc/ld.so.conf文件中来实现环境变量的设置)

 

关于nohup:

nohup
  nohup 命令
  用途:LINUX命令用法,不挂断地运行命令。
  语法:nohup Command [ Arg ... ] [ & ]
  描述:nohup 命令运行由 Command 参数和任何相关的 Arg 参数指定的命令,忽略所有挂断(SIGHUP)信号。在注销后使用 nohup 命令运行后台中的程序。要运行后台中的 nohup 命令,添加 & ( 表示“and”的符号)到命令的尾部。
  如果不将 nohup 命令的输出重定向,输出将附加到当前目录的 nohup.out 文件中。如果当前目录的 nohup.out 文件不可写,输出重定向到 $HOME/nohup.out 文件中。如果没有文件能创建或打开以用于追加,那么 Command 参数指定的命令不可调用。如果标准错误是一个终端,那么把指定的命令写给标准错误的所有输出作为标准输出重定向到相同的文件描述符。
  退出状态:该命令返回下列出口值:
  126 可以查找但不能调用 Command 参数指定的命令。
  127 nohup 命令发生错误或不能查找由 Command 参数指定的命令。
  否则,nohup 命令的退出状态是 Command 参数指定命令的退出状态。
  nohup命令及其输出文件
  nohup命令:如果你正在运行一个进程,而且你觉得在退出帐户时该进程还不会结束,那么可以使用nohup命令。该命令可以在你退出帐户/关闭终端之后继续运行相应的进程。nohup就是不挂起的意思( n ohang up)。
  该命令的一般形式为:nohup command &
  使用nohup命令提交作业
  如果使用nohup命令提交作业,那么在缺省情况下该作业的所有输出都被重定向到一个名为 nohup.out的文件中,除非另外指定了输出文件:
  nohup command > myout.file 2>&1 &
  在上面的例子中,输出被重定向到myout.file文件中。
  使用 jobs 查看任务。
  使用 fg %n 关闭。
  另外有两个常用的ftp工具ncftpget和ncftpput,可以实现后台的ftp上传和下载,这样我就可以利用这些命令在后台上传和下载文件了。