V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
iszengmh
V2EX  ›  程序员

Java 开发有没有方便的工具可以拷贝出 class 文件

  •  
  •   iszengmh · 2019-05-22 22:36:20 +08:00 via Android · 3839 次点击
    这是一个创建于 2017 天前的主题,其中的信息可能已经有所发展或是发生改变。

    每次开发功能要部署到生产环境,不敢整个项目复制上去,只是把自己写得功能 class 文件复制上去,非常麻烦要打开一个个文件夹去复制,有没有什么方便的工具

    37 条回复    2024-03-11 09:22:18 +08:00
    kosmosr
        1
    kosmosr  
       2019-05-22 22:40:10 +08:00 via Android
    arthas
    littlewing
        2
    littlewing  
       2019-05-22 22:41:08 +08:00 via iPhone
    你们不用 git 管理代码的吗
    redtea
        3
    redtea  
       2019-05-22 22:44:03 +08:00 via iPhone   ❤️ 1
    这样部署会出事故的
    loveCoding
        4
    loveCoding  
       2019-05-22 22:44:34 +08:00 via iPhone   ❤️ 1
    生产环境还一个一个复制覆盖 class,这是要跑路的节奏啊,不要走歪路,老老实实去学下 maven/gradle,jenkins
    notreami
        5
    notreami  
       2019-05-22 22:45:17 +08:00
    这个操作,送你 6 字箴言吧。。。。
    npe
        6
    npe  
       2019-05-22 22:45:18 +08:00 via Android
    为啥不在服务器编译?
    ob
        7
    ob  
       2019-05-22 22:48:15 +08:00 via Android   ❤️ 1
    idea 可以设置同步
    iszengmh
        8
    iszengmh  
    OP
       2019-05-22 22:48:31 +08:00 via Android
    svn 管理哦
    serical
        9
    serical  
       2019-05-22 23:01:27 +08:00 via Android   ❤️ 1
    https://github.com/serical/patcher 遇到过类似问题,idea 不知道还能不能用😂
    szq8014
        10
    szq8014  
       2019-05-22 23:31:14 +08:00 via Android   ❤️ 1
    3 年前公司写 java web 还用着 svn 的时候有这样的需求,因为需要将更新发给现场,包越小越好,当时的操作是 svn 选中多个 commit 然后导出,这样就把这几次提交修改的文件带目录结构导出来了,jsp 就不需要啥操作了,java 的话就到每一个 java 文件那里复制文件名然后用 everything 搜名字,找到对应的 class 文件复制过来,java 文件可删可不删。整体操作下来还是挺有效率的。
    sailing0505
        11
    sailing0505  
       2019-05-22 23:54:49 +08:00 via Android
    maven 有个 dependency 插件
    oneisall8955
        12
    oneisall8955  
       2019-05-23 04:21:10 +08:00 via Android   ❤️ 1
    maven/gradle +jenkins 完美解决
    Jonz
        13
    Jonz  
       2019-05-23 08:10:15 +08:00
    之前用 Eclipse 的时候可以按目录结构导出的
    nekolr
        14
    nekolr  
       2019-05-23 08:19:13 +08:00 via Android   ❤️ 1
    这样做不好,不过有个工具可以一试。https://github.com/nekolr/sirius-inc
    使用这个工具需要先提交 svn,然后将需要打包的那条提交的 revision 复制到软件中。
    nekolr
        15
    nekolr  
       2019-05-23 08:21:11 +08:00 via Android
    有什么问题可以交流一下
    fhsan
        16
    fhsan  
       2019-05-23 08:42:23 +08:00
    这样部署肯定有问题的,放 git 里面,部署回滚都很方便。
    5vK0B97Ytv7v5dw5
        17
    5vK0B97Ytv7v5dw5  
       2019-05-23 09:18:42 +08:00
    我之前写的一个 idea 插件 可以试试 也是 javaweb 导出 class 文件 我也一直在用 我扔到了 github 上了 自己 拉一下
    目前没有说明文档 如果有不知道的地方可以问我一下
    https://github.com/laitySunPiaoliang/exportclass/releases
    silentstorm
        18
    silentstorm  
       2019-05-23 09:26:40 +08:00
    还能这样操作,不怕出问题吗?
    比如 a.java 里面定义了一个 static final 常量,有若干 java 文件引用了这个常量。那么在编译时会把常量值编译到引用他的所有 class 文件里面。
    如果你修改了常量值,只把 a.class 部署上去。造成的结果就是其他 class 里面的常量值没有变,你的修改没有起效。
    jimrok
        19
    jimrok  
       2019-05-23 09:26:45 +08:00
    如果不折腾 jenkins,简单就是用 python 的 fabric,或者 ruby 的 capistrano。 或者再简单些,写个 deploy.sh 的 shell script,把 git pull,编译,再 mv,restart 都做一遍
    qping
        20
    qping  
       2019-05-23 09:27:35 +08:00   ❤️ 1
    我在第一家公司的时候也是经历过这个阶段,项目分布在各个地方且是内网无法外网访问,各个地方项目人员变动频繁,代码管理混乱,打出整包能代码到 1 个 G,现场内网网速不快,所以功能更新只能增量包更新,还真有个 windows 下的工具。

    链接: https://pan.baidu.com/s/1AwVnlakRZczoFHE2A3gMvg 提取码: xqtd

    使用方法是选择项目代码根目录,然后选择时间点,能把这个时间点之后修改的文件 + 目录导出来,由其适合 java 这种编译 class 的。

    另外:master 分支上代码应该始终和线上代码保持一致,这么操作会出事,如果你能改变就尽快回归正道,不能的话话早点换个公司对你也比较好。。。。
    Guozi1989
        21
    Guozi1989  
       2019-05-23 09:28:20 +08:00
    我记得三年前我在一家保险公司上班,他们发布也是每次只覆盖 class 文件,这个操作我至今难忘!
    gaius
        22
    gaius  
       2019-05-23 10:10:05 +08:00
    没必要找改的 class,所有的就行了,也不会很大。版本控制要有
    Martin9
        23
    Martin9  
       2019-05-23 10:15:35 +08:00
    我现在也是这样部署的。。。
    一个小项目,只有我自己在做,第一次部署的时候打了个包扔到服务器的 docker 里面。
    后面每次都是把 class 文件直接上传。

    git/svn 还能用在部署方面吗?
    guixiexiezou
        24
    guixiexiezou  
       2019-05-23 10:17:50 +08:00
    当前我就是这样做的,做热修复的时候只能这样手动替换 class 文件,一般情况还好,改不了几个 class,遇到要改一大堆的时候,确实是生不如死
    janus77
        25
    janus77  
       2019-05-23 10:20:36 +08:00
    以前的公司有类似的操作,不过当时是打成 jar 包然后替换的,再 mvn build。你可以试试,这样快速又安全
    janus77
        26
    janus77  
       2019-05-23 10:20:42 +08:00
    以前的公司有类似的操作,不过当时是打成 jar 包然后替换的,再 mvn build。你可以试试
    dalieba
        27
    dalieba  
       2019-05-23 11:42:47 +08:00 via Android
    最简单的办法就是用 7-zip
    Caballarii
        28
    Caballarii  
       2019-05-23 11:52:35 +08:00   ❤️ 1
    @Martin9 肯定啊,要部署直接在服务器用 git/svn 拉代码,现场编译,jenkins 就是这样的东西,图形化界面,把脚本都配好了,以后部署只要把代码一上传到 git/svn,然后在网页上点一下就部署了
    iszengmh
        29
    iszengmh  
    OP
       2019-05-23 12:31:51 +08:00 via Android
    @Caballarii 因为我们都党政机关的项目,服务器都是内网的,不能在服务器里面拉取文件
    lihongjie0209
        30
    lihongjie0209  
       2019-05-23 12:36:40 +08:00
    你全量打包到现场 rsync 就好了
    mikicomo
        31
    mikicomo  
       2019-05-23 12:39:37 +08:00
    @iszengmh #29 把 git、svn、jenkins 也部署到内网可以么?
    Caballarii
        32
    Caballarii  
       2019-05-23 13:32:08 +08:00   ❤️ 1
    @iszengmh 可以在另一台机器上装 jenkins,拉取代码编译,然后把打包好的文件复制传到服务器上,执行启动脚本,这个都是可以写成完整脚本自动执行的
    kevinlm
        33
    kevinlm  
       2019-05-23 13:34:31 +08:00 via iPhone
    从 eclipse3 点几的时候,导出文件就能带目录啊…
    iszengmh
        34
    iszengmh  
    OP
       2019-05-23 15:06:16 +08:00 via Android
    @Caballarii 因为服务器是党政机关相关部门提供云服务,可能需要申请另外的端口开放,这个可以考虑,但是可能比较麻烦
    so2back
        35
    so2back  
       263 天前
    @qping #20 老哥,这个软件还有吗,可以麻烦重新给个链接吗,谢谢
    qping
        36
    qping  
       263 天前 via Android
    @so2back 时间太久了,我也没有留存,你可以自己写一个,根据文件创建时间或修改时间来判断是否要更新
    so2back
        37
    so2back  
       262 天前
    @qping #36 噢好的,那只能自己动手写一个了,还是谢谢老哥
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1265 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 18:11 · PVG 02:11 · LAX 10:11 · JFK 13:11
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.