我自己还是觉得用eclipse第三方插件fatjar直接把java项目打包成jar,上传到服务器直接运行(赋执行权限)即可,参考上一篇关于插件的文章。下边的方法(网上的一些相关资料和做法)有点麻烦,而且容易出错。
1. 先在eclipse下把项目源码导出成jar包,可以选中项目右键->export->jar 。。一步一步到底,最后变成1.jar,再把额外的一些jar包,如lucene、mysql-connecor的一些jar包也打包成一个2.jar(最后使用起来方便),上传到服务器(命令scp -r -Pxx端口号 username@xxx /….)接着输入密码,注意端口号前P要大写,斜杆后世你要把上传的jar包放的路径;
2.除此之外,也要把你的源码的主类文件(含有main函数,如test.java)也上传到服务器上(摆放的位置随意,记得就好);
3.执行。先要执行javac,生成.class文件。格式如下:
javac -cp /home/username/../1.jar:/home.username/../2.jar test.java
4. 对于生成的class文件。执行
java -cp /home/username/../1.jar:/home.username/../2.jar:test
注意:如果class文件有包名字,如package.test,应该是:
java -cp /home/username/../1.jar:/home.username/../2.jar:package.test
最后的冒号不能少~~~
将java工程打成jar包,但第三方jar包并没有包含在包中,当在命令行中运行jar包时,出现类找不到的异常,
在网上看到解决办法是将第三方jar包放到JDK的扩展类文件夹中(%JAVA_HOME%/jre/lib/ext),
再运行,还是出现同样的错误,我的java工程要调用webservice,webservice工程中也用到了相同的jar包,
在启动服务器的时候,不能正确部署webservice,应该是webservice工程中的jar包和JDK中的jar包有了冲突。
通过不断地试验,终于成功了!
1、新建文件夹test位于D盘;
2、将用到的所有第三方jar包放在文件夹lib下,再将lib放在test下;
3、导出的java工程jar包a.jar也放在test下;
4、修改工程jar包META-INF文件夹下的MANIFEST.MF配置文件:
Manifest-Version: 1.0
Main-Class: cn.golaxy.yqpt.client.main.GatherMain
Class-Path: lib/soapmonitor-1.5.jar
lib/spring-aop.jar
写明main函数的包路径(注意:冒号后加一个空格)!
在class-path后写上引用到的所有jar包(注意:要分行写,并不是说一行写一个jar包,只要保证这一行不要太长就好,否则会出现Exception in thread “main” java.io.IOException: line too long
at java.util.jar.Attributes.read(Attributes.java:356)
at java.util.jar.Manifest.read(Manifest.java:167)
at java.util.jar.Manifest.<init>(Manifest.java:52)
at java.util.jar.JarFile.getManifest(JarFile.java:158)
异常,换行时前面加两个空格,最后还有一个回车)!
5、将修改好的MANIFEST.MF文件覆盖掉原来的;
6、在命令行下执行jar包:java -jar a.jar。
够详细的了吧,希望能帮到你O(∩_∩)O哈哈~
在linux 服务器上运行JAVA工程需注意。
1: 在linux 上: /etc/profile 设置classpath 配置正确的jar 路径。
2: 把本地JAVA工程做成一个jar包。如:1.jar
3: 把JAVA工程的包含的jar包 和步骤2中的jar包 上传到制定目录。 如2.jar
运行
java -classpath /usr/javalib/1.jar:/usr/javalib/2.jar java类
例如:如果在/etc/profile中设置
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:/home/caojh/lib/commons-lang-2.2.jar:/home/caojh/lib/junit.jar:
可以省去 -classpath .
注意:eclipse 中的工程需单独做成一个jar包.