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

把 SpringBoot 项目开发环境从 Windows 迁移到 macOS 遇到的文件保存路径问题

  •  
  •   NASK · Mar 4, 2025 · 2229 views
    This topic created in 461 days ago, the information mentioned may be changed or developed.
    之前开发一直使用的 Windows ,服务器使用的 Linux Docker Tomcat 容器 war 包部署。没有使用对象存储,代码中文件保存逻辑针对 Windows 和 Linux 系统进行判断写了两套逻辑。最近换了 macOS ,不想再写一套 macOS 的逻辑了,想直接让 SpingBoot 的项目在本地 Docker 容器运行调试,这种方法可行吗?麻烦万能的 v 友给一个思路。
    12 replies    2025-03-05 10:56:23 +08:00
    jackshen
        1
    jackshen  
       Mar 4, 2025
    代码贴一下?或者报错信息贴一下?感觉你这个情况在 macos 装一个 window 虚拟机,在虚拟机里开发可能会更简单
    SmallZheng
        2
    SmallZheng  
       Mar 4, 2025
    基本上可以,macOS 的 docker 也是基于 Linux 的
    hippieZhou
        3
    hippieZhou  
       Mar 4, 2025 via iPhone
    可以通过 docker 来挂载外部文件系统的方式解决么,通过 docker 来隔离不同系统的文件系统差异,对应用程序而言隐藏这些差异
    itechify
        4
    itechify  
    PRO
       Mar 4, 2025
    常用文件工具都封装好了吧,什么错?
    NASK
        5
    NASK  
    OP
       Mar 4, 2025
    @jackshen
    if (CommonUtil.isWindows()){
    tempPath = Constants.STATIC_PATH + "/systemfile/" + XXX_SERVER + "/";
    }
    if (CommonUtil.isLinux()){
    tempPath = "/software/resources/config/" + XXX_SERVER + "/";
    } 代码里很多这种,我不想再写一个 CommonUtil.isMacOS()了,判断系统类型用的是 public static boolean isWindows() {
    return System.getProperty("os.name").toLowerCase().contains("windows");
    }这种
    NASK
        6
    NASK  
    OP
       Mar 4, 2025
    @oneisall8955
    没报错,我目前加了一个 CommonUtil.isMacOS()的逻辑,但是感觉太麻烦了,需要修改多处代码。想试着在本地容器跑,这样就不用加 CommonUtil.isMacOS()的判断了。war 包直接映射到 tomcat 容器,调试用 tomcat remote 。
    sagaxu
        7
    sagaxu  
       Mar 4, 2025
    @NASK 临时目录难道不应该读 java.io.tmpdir 属性吗?这东西就不应该写死在代码中。
    NASK
        8
    NASK  
    OP
       Mar 4, 2025 via iPhone
    @sagaxu 这个项目也有一年多了,我是最近参与的,难受的是这种硬编码在这个项目里还有很多😇
    monmon
        9
    monmon  
       Mar 5, 2025   ❤️ 1
    一年多的项目就别屎上堆屎了,ctrl+shift+F `CommonUtil.isWindows()` 这种代码一般不会超过 100 处,抽到配置文件区分一下环境,几分钟顺手就改改了,大家都舒服。
    conn4575
        10
    conn4575  
       Mar 5, 2025 via Android
    你的文件应该都是按某种目录结构保存在某个根路径下,只需要定义根路径的位置,其他目录都使用相对路径就行了,相对路径的写法三个系统都是通用的。
    zhady009
        11
    zhady009  
       Mar 5, 2025 via iPhone
    Path 本来就 3 个平台都支持不需要做什么,除非你自己写死
    jackshen
        12
    jackshen  
       Mar 5, 2025   ❤️ 1
    @NASK #5 这个方法了解一下? java.io.File#createTempFile(java.lang.String, java.lang.String)
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5399 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 47ms · UTC 08:40 · PVG 16:40 · LAX 01:40 · JFK 04:40
    ♥ Do have faith in what you're doing.