如何在Maven多模块上仅构建某些子模块?



我已经配置了一个Maven多模块。顶部有一个父模块,公共模块、子模块和友模块被创建为子模块。

子模块和友模块依赖于公共模块。

子模块中有一个变化,所以我想只构建子模块。所以我运行了在父模块的pom.xml文件所在的目录中执行mvn clean package-pl childbuild命令,并且出现如下所示的错误。

$ mvn clean package -pl child
[INFO] Scanning for projects...
[INFO]
[INFO] -------------------------< com.example:child >--------------------------
[INFO] Building child 0.0.1-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[WARNING] The POM for com.example:common:jar:0.0.1-SNAPSHOT is missing, no dependency information available
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  0.269 s
[INFO] Finished at: 2022-11-23T23:17:32+09:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal on project child: Could not resolve dependencies for project com.example:child:jar:0.0.1-SNAPSHOT: Could not find artifact com.example:common:jar:0.0.1-SNAPSHOT -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/DependencyResolutionException

之后,我添加了-am选项来运行mvn clean package -pl child -am构建命令,它工作得很好,但是子模块所依赖的公共模块也被构建了。

[INFO] Building jar: D:workspacestsparentchildtargetchild-0.0.1-SNAPSHOT.jar
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary for parent 0.0.1-SNAPSHOT:
[INFO]
[INFO] parent ............................................. SUCCESS [  0.171 s]
[INFO] common ............................................. SUCCESS [  0.924 s]
[INFO] child .............................................. SUCCESS [  0.061 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  1.276 s
[INFO] Finished at: 2022-11-23T23:18:13+09:00
[INFO] ------------------------------------------------------------------------

我担心的是,朋友模块,另一个依赖于公共模块的模块,有可能不能正常运行。

从这里提到的,它说在运行应用程序后删除jar文件可能无法正常工作。(该应用程序在Unix操作系统上运行)

因此,即使好友模块和公共模块没有变化,如果因为子模块而构建了公共模块,那么已经运行的好友模块将无法正常运行。

我该怎么办?如果我总结我想要的,

  1. 我想只构建有变化的子模块。
  2. 如果一个模块(如一个公共模块)被另一个模块引用的变化,我想建立所有的模块(子,朋友)模块由该模块引用。(在这种情况下,如果你给我-amd选项,我想我可以很容易地解决它。)

我给出了mvn选项并实现了它,但它与我期望的不同

当您使用package构建时,下一次构建将不会找到已经构建的工件。

要解决这个问题,可以使用install目标,使工件在本地可用以供以后使用。

最新更新