有些时候,需要将java程序双击就可以运行的jar文件,如果用手工打包会比较痛苦(尤其是包含有第三方的jar时),这里介绍一个快捷的方式:用FatJar实现。 
1、下载、配置。
fatjarEclipse的一个插件,下载后配置到eclipse中即可。
下载地址:downloads.sourceforge/fjep/net.sf.fjep.fatjar_0.0.27.zip?modtime=1195824818&big_mirror=0
在线安装地址:kurucz-grafika.de/fatjar
配置好重新启动eclipse,在首选项可发现Fat Jar Prefreence”,表示安装成功。 
 相关附件可以在我的blog上下载:sosuny.javaeye/blog/891089
2、生成可运行jar
选中一个项目,右键选择build fat jar”探出对话框,"jar-name"Main-Class”必须填写。
完成后下一步
选择需要到处的资源(一般全选择)
 
选好后,点击完成生成jar文件。
rar打开文件可以看到第三方的库也一并打入了包中。 
ok,现在运行java -jar xxx.jar”可以看到结果了。 
3、在windowslinux下执行
(假定我们打包后的文件名称是resourceMonitor.jar,主类是job.StartUp,并且需要一个sigar-x86-winnt.dll库支持)
a、在windows下:
新建runResourceMonitor.bat文件,和resourceMonitor.jar同目录,内容如下:
代码 
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 
@echo off
echo 正在执行,请稍等......
@rem start "Ecode App Server Monitor v1.0" java -jar resourceMonitor.jar
start "Ecode App Server Monitor v1.0" java -classpath .\resourceMonitor.jar;.\dll\sigar-x86-winnt.dll job.StartUp
java创建文件echo 执行完成!
@rem pause
 拷贝sigar-x86-winnt.dll,和resourceMonitor.jar同目录。
最后的目录结构:
 
双击runResourceMonitor.bat”即可启动服务。 
b、在linux下运行 
linuxwindows有所不同,主要表现在对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 & 
export LD_LIBRARY_PATH=./so:$LD_LIBRARY_PATH
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/f文件中来实现环境变量的设置)
 
关于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工具ncftpgetncftpput,可以实现后台的ftp上传和下载,这样我就可以利用这些命令在后台上传和下载文件了。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。