相关文章推荐
捣蛋的针织衫  ·  FFMPEG结构体分析 ...·  1 年前    · 
沉着的投影仪  ·  【C++ 内存管理 ...·  1 年前    · 
最近把项目从maven升级到gradle, 碰到某个类NoSuchMethod 问题,但偶尔又没有问题。最后定位到jvm运行时加载的类是从out目录加载的,而这里目录的类确实没有这个方法,至于build目录和out目录怎么来的,请参考下面的文章:
转载: https://blog.csdn.net/u013837825/article/details/87522677
gradle使用过程遇到的一个关于out目录的问题

项目采用多模块构建的项目;
web模块 下的 XxxController 引用了 commons模块 下的某个 DTO类 ,在 DTO类 中添加了几个参数,重启之后 controller 类中接收的参数始终无法获取到新增的这几个。

初步怀疑是gradle编译的问题,重新clean build都不行,后来又怀疑是gradle缓存的问题,删除了本地的gradle仓库缓存也不行;

最初只知道编译之后,项目模块目录下会生成一个 build 目录存放编译后的 class文件 ,查看了编译后的文件,里面是有新增的那几个参数的;
后来好奇为什么还会有一个 out目录 ,这个目录也是编译后生成的吗?打开目录在对应的那个编译后的 class文件 ,发现并没有新增的哪几个参数;
感觉看到了希望。。。

再次进行 gradle clean 操作,发现 out目录 根本没有被清理掉,至此,答案逐渐清晰;

历史中的某次操作,生成了 out目录 ,且此目录不会被 clean命令 清零掉;
此后的编译,生成的 build目录 一直不生效;

手动删除项目下的所有 out目录 ,重启,问题消失;

课余时间深入学习一下 gradle

搞清楚 out目录 是怎么出来的,为什么 gradle clean命令 都清理不掉;

为什么 out目录 下的 class文件 build目录 下的 class文件 优先级要高?

2019-02-25 更新
上网查询了一些资料,发现构建产生的 out目录 是idea编译时默认产生的,如下操作找到设置:
邮件项目名 -> Project Structure -> Modules -> {module名称}_main
从上图可看出,idea默认将编译结果放到了/Users/xxx/Documents/idea-project/mybatis-plus-sample /out/production/classes 中。