我有一个由几个模块组成的maven项目。主要结构和设置如下:
/project/pom.xml
:packaging = pom,列出所有子模块,版本:TRUNK-SNAPSHOT
/project/core-module/pom.xml
:packaging = jar /project/war-module/pom.xml
:packaging = war,取决于core-module
与${project.version}
如果这在某种程度上很重要,我会使用IntelliJ进行开发。
当我现在开发/运行/调试war-module
并同时更改core-module
中的代码时,事情就会失控。正在运行的war-module
应用程序(通过jetty:run-exploded
运行)使用我本地core-module
中“已安装”的~/.m2/ repository
而不是当前版本。如果我在IntelliJ中执行“重建项目”或在mvn clean
运行之前无关紧要。
我的问题是:我每次都需要mvn install
,我是否可以绕过已安装的软件包,还是必须更改包装选项?
答案 0 :(得分:1)
长话短说,答案是:是的,在多模块项目中,每次都必须运行mvn install
,以便war-module
的依赖关系被编译并安装在本地存储库中
但是,对于本地测试,我通常建议使用IDE功能来测试我们的本地更改。使用IntelliJ非常容易配置,它支持许多不同的应用程序服务器。
原因是:想象一下,在一个大型团队中工作,使用企业共享存储库来保存您的公共依赖关系,而无需将它们发布到Maven中心。如果您的任何同事已对core-module
进行了更改,提交了它们并通过内部共享仓库使其可用,那么Maven将下载该依赖项,然后使用它来运行Jetty插件。
这方面的好处是你将测试这些依赖项的最后版本,不好的一面是这些依赖项的代码与工作副本中的代码不同。