开发者

In Maven, Why Run 'mvn clean'?

开发者 https://www.devze.com 2023-02-03 22:08 出处:网络
I am wondering what the major difference between running mvn com开发者_运维技巧pile and mvn clean compile are, in practicality.

I am wondering what the major difference between running mvn com开发者_运维技巧pile and mvn clean compile are, in practicality.

I understand what the actual difference is, that mvn clean compile deletes all the generated files and starts again from scratch, but why would we want to do this? I can assume mvn compile will regenerate files if it's necessary, right?

One thing I noticed in my project was that if you had deleted a source file, without running clean, the compiled file remains, which usually wouldn't be a problem, but could be I suppose.


For example: If you rename a class, the previous compiled version will remain in target/classes until you run clean. This maybe completely harmless, but it could cause issues if it is autodetected by classpath scanning and the like.


As noted in Gareth's answer, when you rename or remove a source class, Maven doesn't have sufficient information to know to remove the corresponding compiled file from the previous build. The presence of the stale file can cause unexpected runtime problems. A clean is required to get rid of the stale files so that they doesn't get accidentally included in WARs, JARs and so on.

In addition, certain plugins require a clean in order to work properly. For example (at least in Maven 2), the maven-war-plugin explodes each dependent WAR into an existing directory tree. A clean is required to get rid of stale files left over from previous versions of the dependent WARs.

I can assume "mvn compile" will regenerate files if it's necessary, right?

For mainstream plugins, that is a fair assumption. However, if you are using a plugin to generate source code components, I'd look carefully at the documentation, and at where you put the generated source code. For instance, there are a couple of unsupported plugins whose purpose is to drive the Eclipse EMF code generator.


If you don't do clean compile then it means you are still allowing to work with some obsolete classes. If your module suppose to migrate to new class then even you missed that, there won't be any compilation error due to old class exist in target/classes. This will remain unnoticed till same module is built at some other place/machine with clean compile goal.


On Maven, each time you want to compile, the best practice is to run mvn clean. It clears out the existing classes that you compiled from last compile. If you don't want to run 3 lines, just do "mvn test" after mvn clean. You don't have to always do mvn compile.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号