Maven 是一种流行的项目管理工具,它以项目对象模型 (POM) 为基础,提供了一种标准化的方式来构建和管理项目。在执行 Maven 中的几个主要操作时,包括 package、install、deploy 等,我们可以使用 clean 来清理之前编译的产物,或者不使用 clean 来直接构建产物。使用或者不使用 clean 的主要区别在于编译产物是否被清理,以下是完整攻略。
一、使用 Maven 中的 clean(清理已编译的产物)
当我们使用 Maven 构建项目时,它会在项目的 target 目录下生成一些编译产物,例如 jar 文件或者 war 文件等。有时候,我们可能需要重新构建这些产物,例如需要重新打成一个 jar 文件,或者重新生成文档等等。
那么,在这种情况下,我们可以使用 Maven 中的 clean 命令来删除之前编译的产物,然后重新构建。具体命令为:
mvn clean package
使用了 clean 命令后,Maven 会删除 target 目录下的所有编译产物,并重新构建项目,生成新的编译产物。
以下是一个示例,当我们在命令行中执行 mvn clean package 命令时,Maven 会执行以下步骤:
- 删除之前编译的产物,包括 target 目录下的所有文件;
- 编译项目,生成新的编译产物;
- 将编译产物打成一个 jar 文件。
$ mvn clean package
[INFO] Scanning for projects...
[INFO]
[INFO] ---------------< com.example:my-project >----------------
[INFO] Building my-project 1.0-SNAPSHOT
[INFO] --------------------------------[ jar ]-----------------
[INFO]
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ my-project ---
[INFO] Deleting /path/to/my-project/target
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ my-project ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory /path/to/my-project/src/main/resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ my-project ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ my-project ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory /path/to/my-project/src/test/resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ my-project ---
[INFO] No sources to compile
[INFO]
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ my-project ---
[INFO] No tests to run.
[INFO]
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ my-project ---
[INFO] Building jar: /path/to/my-project/target/my-project-1.0-SNAPSHOT.jar
[INFO]
[INFO] --- maven-install-plugin:2.4:install (default-install) @ my-project ---
[INFO] Installing /path/to/my-project/target/my-project-1.0-SNAPSHOT.jar to /home/user/.m2/repository/com/example/my-project/1.0-SNAPSHOT/my-project-1.0-SNAPSHOT.jar
[INFO] Installing /path/to/my-project/pom.xml to /home/user/.m2/repository/com/example/my-project/1.0-SNAPSHOT/my-project-1.0-SNAPSHOT.pom
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 4.921 s
[INFO] Finished at: 2022-01-01T00:00:00+08:00
[INFO] ------------------------------------------------------------------------
在以上示例中,我们可以看到使用 clean 命令后,之前编译的产物被删除,然后重新编译并打包成了一个 jar 文件。
二、不使用 Maven 中的 clean(不清理已编译的产物)
如果我们不使用 Maven 中的 clean 命令,而是直接执行 package、install 或者 deploy 命令,那么之前编译的产物将不会被清理,而是直接使用之前编译的产物进行下一步的操作。
以下是一个示例,当我们在命令行中执行 mvn package 命令时,Maven 不会清理之前编译的产物,而是直接使用之前编译的产物进行下一步操作。
$ mvn package
[INFO] Scanning for projects...
[INFO]
[INFO] ---------------< com.example:my-project >----------------
[INFO] Building my-project 1.0-SNAPSHOT
[INFO] --------------------------------[ jar ]-----------------
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ my-project ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory /path/to/my-project/src/main/resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ my-project ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ my-project ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory /path/to/my-project/src/test/resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ my-project ---
[INFO] No sources to compile
[INFO]
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ my-project ---
[INFO] No tests to run.
[INFO]
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ my-project ---
[INFO] Building jar: /path/to/my-project/target/my-project-1.0-SNAPSHOT.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 4.921 s
[INFO] Finished at: 2022-01-01T00:00:00+08:00
[INFO] ------------------------------------------------------------------------
在以上示例中,我们可以看到在没有使用 clean 命令的情况下,Maven 不会清理之前编译的产物,而是直接使用之前编译的产物进行下一步操作。
综上所述,我们在执行 Maven 的 package、install、deploy 等操作时,可以使用或者不使用 clean 命令,具体是否需要清理之前编译的产物,要根据实际情况来判断。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:maven 在执行package,install,deploy时使用clean与不使用clean的不同之处 - Python技术站