Difference between intellij Project make and Maven Compile?

When working in maven module, what's the difference between doing in intellij build -> Make Project and Maven Projects -> Root pom -> Compile phase.

Does intellij calls maven? Does both of them compile the sources to the same place? Do they both copy resources files? Why do we need both options? Does intellij download the dependencies automatically and we can just call project make, without using maven compile?

intellij project: two ways of compiling


They are actually quite similar in terms of the task they perform which is to compile the source and test paths of the project with javax.tools.JavaCompiler by default.

Does intellij call maven?

No it doesn't by default. Remember that this is just IntelliJ's built in Java compiler and some Java projects don't use maven.

Does both of them compile the sources to the same place?

Yes, they use the same source files to compile if that's what you are asking here.

Do they both copy resources files?

Yes they both copy the resource files to different locations though.

Why do we need both options?

We don't need both options. Maven compile command checks the source code against any syntactical errors which effectively covers the work done by IntelliJ's make option.

Does intellij download the dependencies automatically and we can just call project make, without using maven compile?

Intellij's compiler can be considered as syntax compiler which is why you need maven to handle your project's dependencies.


No, IntelliJ doesn't call maven, but get all information from the pom.xml e.g. output directories libraries etc.

So don't worry, you can call make from IntelliJ for compiling and running your application. If you have some special goals in your maven build file you can run it from the maven window.

All maven dependencies will be downloaded from IntelliJ an stored in the maven local repository.


Let's think we have a Project A which is use Maven Project B.

If you had changed B project you have to update this project on A. Then you have to compile B in A.

But if you had changed only A you dont have to compile Maven.