【IDEA】Maven项目编译路径:模块输出vs继承输出的关键区别
在 IntelliJ IDEA 中对于 Maven 项目“继承项目编译输出路径”和“使用模块编译输出路径”的主要区别在于.class文件编译后的产物存放的位置以及与 Maven 标准目录结构的兼容性。简单来说Maven 项目强烈建议使用“使用模块编译输出路径”。1.使用模块编译输出路径——推荐Maven项目使用这是 IntelliJ IDEA 导入 Maven 项目时的默认且推荐的设置。含义每一个模块都有自己的、独立的编译输出目录。实际路径通常情况下IDEA 会自动将其配置为 Maven 的标准目录生产环境代码你的项目路径/模块名/target/classes测试代码你的项目路径/模块名/target/test-classes优点符合 Maven 标准与命令行执行mvn compile或mvn package的输出目录完全一致。资源管理清晰Maven 的资源文件src/main/resources会被正确复制到与.class文件相同的目录下。避免冲突如果你的项目有多个模块每个模块的编译结果相互隔离不会混在一起。构建工具兼容当你使用 IDEA 的 Run/Debug 配置运行应用或者外部使用 Maven 命令打包时大家读取的都是target目录下的同一份文件不会出现“IDEA里运行正常打成jar包运行报错”的问题。2.继承项目编译输出路径——通常不用于Maven这是旧版 IDEA 或者纯 Java 项目非构建工具项目中常见的设置。含义该模块不使用自己的输出目录而是跟随整个项目的全局设置。实际路径所有模块的编译结果都会被扔到同一个“大锅”里。通常是在项目根目录下的out/production/或类似的文件夹中具体取决于 Project Structure 中的全局设置。缺点针对 Maven 项目破坏 Maven 结构Maven 默认只识别target目录作为输出。如果你选择此选项IDEA 编译的文件去了out目录而 Maven 插件运行时去target目录找文件。可能导致运行错误如果你没有配置 IDEA 将构建动作委托给 MavenDelegates to Maven那么你直接点击 IDEA 的“运行”按钮时它运行的是out目录下的旧代码或缺失资源而你的target目录下可能是空的。模块间混淆在多模块项目中所有模块的 class 文件堆叠在一起难以排查问题。总结与建议特性继承项目编译输出路径使用模块编译输出路径存储位置集中式如out/production分布式如module1/target/classes多模块隔离否混在一起是互不干扰Maven 兼容性差需手动配置路径才能对应 target完美自动对应target/classes适用场景简单的纯 Java 项目、旧项目Maven 项目、Gradle 项目
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2595304.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!