机器学习和生物信息学实验室联盟

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2825|回复: 3
打印 上一主题 下一主题

jar包上传到服务器上的那些事

[复制链接]
跳转到指定楼层
楼主
发表于 2015-1-7 20:39:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 wangjingjing 于 2015-1-8 17:05 编辑

      作为一个彻头彻尾的菜鸟,最近需要在服务器上跑代码,揪心的事可真不少。
      在本地写完代码了,得打包上传到服务器。问题来了,那么多第三方的jar包怎么办?
     要么打成 Runnable的jar包吧,每次打的包都好大,上传效率太低了。要是遇上那种bug还有很多的代码,那就够麻烦了。要么打成普通的jar包,不把第三方的包包含进来,然后在profile中(linux系统下)修改classpath的值,这样也是可以的,但是如果第三方的Jar包很多,需要修改的classpath就很多了,也不大方便。
      所以,我用的方法是这样的,
      1. 第一次打包的时候打成Runnable的Jar包(此时需要指定mainclass),这样把这个工程所需要的jar包都包含进jar包了,比如生成了 a.jar,上传这个jar包到服务器,就可以直接跑了,可以使用命令:
  1. java a.jar
复制代码

    (我感觉好像很不方便呀,如果需要同时执行多个class,可是runnable只能指定一个mainclass,这要怎么办?)
     2. 把工程下已经编译好的class文件(文件夹也可以)上传到服务器,然后使用如下命令来执行类test:
  1. java -cp .:a.jar test
  2. -cp 即指定classpath为之前打包好的Jar包,这样所需要的class都能在这个jar包中找到了。
  3. test就是要执行的主类
复制代码

    这里一定要注意在classpath中要加上前面的 . (表示当前路径,默认 test所在的路径就是当前路径),那么在执行的时候,会先在当前路径下寻找 test.class(可能是已经修改过的,较新的class 文件), 否则会在jar中寻找第一次打包的时候可能已经存在的较老 test.class.  (被坑了好久才发现这个问题,所以一定要小心!)
      这种方法可以同时执行多个类,也保证了所有的第三方Jar包都能找到。同时,如果在本地修改了其中一个类,那么只需要重新上传这个修改了的类的.class文件就可以了,也很方便。
      不知道有没有说错的地方,欢迎指正。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 转播转播 分享分享
回复

使用道具 举报

沙发
发表于 2015-1-17 23:25:53 | 只看该作者
菜鸟第二种暂时搞不定~   
第一种打包成Runnable “ 如果需要同时执行多个class,可是runnable只能指定一个mainclass,这要怎么办?” 是说一个程序同时要执行多个函数吗?
回复 支持 反对

使用道具 举报

板凳
 楼主| 发表于 2015-1-18 16:35:01 | 只看该作者
guojiasheng 发表于 2015-1-17 23:25
菜鸟第二种暂时搞不定~   
第一种打包成Runnable “ 如果需要同时执行多个class,可是runnable只能指定一 ...

嗯,对,你需要同时执行多个函数。比如,一个模拟的服务端,另一个客户端,这个时候貌似就办不到了。。
第二种方法有什么问题吗?我现在一般都用这种方法跑了,挺方便的。

点评

高端!原本我也想问同样的问题,没好意思问:)  发表于 2015-1-18 17:07
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

机器学习和生物信息学实验室联盟  

GMT+8, 2024-5-17 17:53 , Processed in 0.074849 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表