• 请不要在回答技术问题时复制粘贴 AI 生成的内容
iszengmh
V2EX  ›  程序员

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

  •  
  •   iszengmh · May 22, 2019 via Android · 5165 views
    This topic created in 2729 days ago, the information mentioned may be changed or developed.

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

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

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

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

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

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