本文章非原创,原文链接:
IDEA有三种编译类型 :
- Compile
- Make
- Rebuild
- Compile - 只编译指定范围内的文件。 例如,您可以只编译一个类或一个包(当然还有一个模块)。 它不会传递编译依赖项。 因此,如果Foo依赖于Bar,而Bar之前没有编译,并且您只编译Foo,则编译失败;如果Bar在编译后更改,然后您只编译Foo,则它使用旧的Bar编译版本,而不是重新编译已更改的Bar类。 Compile总是编译指定范围内的所有内容,不论是否修改过,但同样不会在模块间传递/递归。例如,编译模块“GUI”,它依赖于模块“API”,则只编译GUI。 如果先前没有编译“API”(或者有更改),则GUI的编译将失败。 最后,Compile只编译代码。 它不会创建任何artifact(JAR,WAR等)
- Make - Make仅限于模块或项目级别。(即你不能Make单个的class或package)。它只编译修改过的类。但是,Make将以可传递/递归方式编译依赖项。 因此,使用上面的例子,如果我们Make “GUI”模块,它也将Make “API”并编译自上次编译以来修改的任何类。 在Make 项目时,会执行一些附加到make进程的其他任务,例如EJB验证。 最后,make只编译类并且不创建任何artifact(JAR,WAR等)。因此,compile和make之间的主要区别在于compile可以在更精细的级别(类或包)上执行编译,make可使编译传递/递归依赖。
- Rebuild - 这会对项目执行完全清理。 因此,与make不同,它会删除所有以前编译的对象。 Rebuild只能在项目级别执行,不能Rebuild单个模块。 Rebuild只编译类,不会创建任何artifact(JAR,WAR等)
还有“Build Artifact”操作,允许您“Build”,“Rebuild”或"Clean" 这个artifact。 如果有修改的代码,Build只构建它,而Rebuild总是重建它。
另外值得注意的是,在编译器配置中,如果选择了“使用外部构建”选项,则可以选择“自动生成项目”。 后者只是在单独的OS进程中运行构建。 因此您可以选择前者,IDEA将自动在后台制作项目。 因此,当您运行代码或测试时,通常很少有代码需要编译。
另一个问题:从文档和查看自动生成的ant脚本,intellij默认为每个模块创建两个子目录:测试和生产......我以一般方式理解这种区别,但这里的故事究竟是什么? 我能够定义两个不同的构建配置文件,一个用于测试,一个用于生产? 我没有看到任何配置面板
您无法为生产与测试代码定义不同的构建配置文件。 您只能使用不同的输出目录。 默认情况下,IDEA会将内容拆分为两个不同的目录,即“ 文件”>“项目结构”>“项目设置”>“项目”>“项目”编译器输出中配置的目录的“生产”和“测试”。 您可以在文件>项目结构> [项目设置]>模块> {模块名称}>'路径'选项卡>编译器输出中按模块级别自定义此项。 如果您没有看到已编译的类被拆分,则很可能意味着未正确识别源路径。 转到文件>项目结构> [项目设置]>模块> {模块名称}>'源'选项卡 ,确保您的测试源目录标记为测试源(绿色)而不是源。