V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
micean
V2EX  ›  问与答

idea + spring boot, 重编译会删除 target 里的资源文件是怎么回事

  •  
  •   micean · 2019-09-21 08:48:48 +08:00 · 4932 次点击
    这是一个创建于 1871 天前的主题,其中的信息可能已经有所发展或是发生改变。

    这是哪一块配置的原因?导致我现在改个模板文件都要自己复制到 target 里,没办法好好工作了

    第 1 条附言  ·  2019-09-21 09:33:41 +08:00
    感觉自己没说清

    是在运行时 recompile 后,在某次请求之后,会删除本次请求访问过的、有过变化(与启动时相比)的资源文件。
    启动项目用的 idea 的 spring 插件
    14 条回复    2019-09-21 17:26:04 +08:00
    passerbytiny
        1
    passerbytiny  
       2019-09-21 09:08:43 +08:00
    😰
    请先了解“Maven target folder”、“maven clean”、“maven package”,最好再额外了解小“classes”、“dest”目录。
    micean
        2
    micean  
    OP
       2019-09-21 09:15:06 +08:00
    @passerbytiny

    不是 maven 本身的事情
    pom 都没变过
    把当前分支并到其他分支,再切换回当前分支就这样了,怀疑是 idea 的原因,但是 setting->compile 那里点了几下没啥用
    Solace202
        3
    Solace202  
       2019-09-21 09:21:32 +08:00 via Android
    target 本身就是 mave 编译后放置编译后文件的文件夹,class 文件,war 包啥的,每次重新编译肯定会覆盖之前的啊
    Solace202
        4
    Solace202  
       2019-09-21 09:25:01 +08:00 via Android
    资源文件为啥放 target 里?建议了解下每个文件夹的功能
    micean
        5
    micean  
    OP
       2019-09-21 09:34:43 +08:00
    @passerbytiny
    @Solace202

    我自己没说清,补充了一下场景
    AlisaDestiny
        6
    AlisaDestiny  
       2019-09-21 09:39:07 +08:00
    src 目录才是你放东西的地方,target 目录全是自动生成的东西,配置好 pom 文件,src 里的东西会自动编译 /复制进 target 目录。
    Bryan0Z
        7
    Bryan0Z  
       2019-09-21 09:45:54 +08:00 via Android
    楼上都没理解问题吧,Maven 会执行 compile 前会自动执行 clean,这一步会删除 target 文件夹下面所有文件。
    关于楼主的问题,可以在 pom 文件里手动指定 resources 的处理逻辑,比如每次编译都复制到指定文件夹,这样就不会有问题了
    micean
        8
    micean  
    OP
       2019-09-21 09:55:28 +08:00
    @Bryan0Z

    是运行时发生的,不是启动时删除的
    比如说我修改了 /resources/tamplates/下的某个模板文件
    1. 如果我 recompile 整个 tamplates,tamplates 里的文件被复制到 target 相应目录里。请求读取这个文件之后,target 相应目录的大部分模板文件(包括一部分未修改的)会被删除掉
    2. 如果我复制这一个模板文件到 target 相应目录,再 recompile 某个 java 文件。请求读取这个文件之后,target 相应目录的这个模板文件会被删除掉
    Bryan0Z
        9
    Bryan0Z  
       2019-09-21 10:02:04 +08:00 via Android
    @micean 对呀,每次你 recompile,target 下面都会被清空,无论你的程序对于 resources 做了什么修改,都不会在下次编译被保留。我觉得 SpringBoot 自带的多配置管理更适合你
    micean
        10
    micean  
    OP
       2019-09-21 10:05:28 +08:00
    @Bryan0Z

    recompile 不会被清空,因为是 idea 执行的不是 maven 啊,maven 也要加 clean 才会清空
    BLK
        11
    BLK  
       2019-09-21 10:55:09 +08:00
    重新编译不是就会删除 target 的文件,然后再重新覆盖一边嘛
    micean
        12
    micean  
    OP
       2019-09-21 11:15:37 +08:00
    折腾了一上午,rebuild 整个工程又 tm 正常了……跟重启电脑有异曲同工之妙
    yqsas
        13
    yqsas  
       2019-09-21 12:11:10 +08:00 via iPhone
    遇到过,idea 和 maven 版本都一样,一个电脑没问题,一个不能在 target 编译出 resources 的文件,时好时坏没找到原因
    leey
        14
    leey  
       2019-09-21 17:26:04 +08:00
    我遇到过,检查是否将 resources 文件夹在 idea 里设为资源文件夹,如果没有的话,可以右键 resources 文件夹,选择菜单 Mark Directory as Sources Root。如果用 kotlin,某些 kotlin 版本也会有这个问题。更换 kotlin 版本,还有 kotlin 编译插件的版本
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1230 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 17:56 · PVG 01:56 · LAX 09:56 · JFK 12:56
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.