最佳实践。 `mvn install`,多模块项目,并运行一个子模块

时间:2012-05-21 13:59:19

标签: maven

我倾向于避免在我的多模块项目中使用mvn install,因为我觉得在构建/启动其他子模块时(特别是在分支之间切换时)我当时不知道子模块的确切版本经常) 我倾向于经常使用mvn package,然后使用mvn verify

我现在面临a FOSS project(Maven原型)的问题,我想使用Maven的最佳实践。 这是一个带有webapp子模块的多模块项目,具体取决于其他模块,让我担心的是易于开发以及mvn jetty:run(或jetty:start)。

目前,我定义了两个配置文件:

  1. prod,默认值,声明对其他子模块的依赖;
  2. 另一方面,
  3. dev 依赖于其他模块,并通过将其他模块的输出目录添加为jetty-maven-plugin来配置extraClasspathresourcesAsCSV
    这样,我可以mvn package一次然后cd webapp && mvn jetty:start -Pdev并快速迭代,重新加载webapp而无需甚至停止服务器。
  4. AFAICT,extraClasspath是为了这个目的而添加的(JETTY-1206) 我已经指出tomcat7-maven-plugin可以在使用Maven 3时从reactor构建中解析模块(我提出了一个问题,将它带到Jetty:JETTY-1517),但这很难解决我的< / p>

    如果我没有从dev配置文件中删除对其他子模块的依赖,我必须先执行mvn install,以便验证POM不会失败,即使jetty:start之后不会使用这些依赖项。

    所以这是我的问题:mvn install真的那么常见吗?或者我的方法是只将反应堆内的依赖关系放在prod个人资料中吗?

    (请注意我与gwt-maven-plugin有完全相同的问题,所以请不要告诉我只需切换到Tomcat;这实际上甚至不起作用,详情here

3 个答案:

答案 0 :(得分:1)

mvn install特别与多模块构建有关,因为它使您有机会从多模块构建中运行单个模块。

这可以通过使用:

来实现
mvn -pl submodule LifeCycle

答案 1 :(得分:1)

我刚刚找到了一个解决方法(这似乎是事后的逻辑):https://jira.codehaus.org/browse/JETTY-1517?focusedCommentId=306630&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-306630

简而言之:默认情况下,在父模块中跳过插件,然后在需要的地方重新启用它。

但这只适用于可以跳过插件(即具有skip配置)且仅在一个特定子模块中使用的情况,并且必须针对您需要/想要运行的每个插件选择性地执行此操作方式(在我的情况下,jetty:rungwt:run)。

答案 2 :(得分:0)

我在笔记本电脑上完成了大部分开发工作。对于我目前正在进行的项目,我的本地存储库实际上更像是一个临时存储区域。我一直在运行mvn install。将工件放在一个本地仓库中是我所知道的在项目之间共享构建工件的唯一方法,特别是如果您正在处理相关但不是(并且不应该)是同一个多模块构建的一部分的项目。

当我完成开发时,我提交了对共享SCM的更改,并让Jenkins构建&amp;将代码部署到共享远程仓库。然后,我要么在我的本地存储库中清除已更改的项目,以便下一个构建关闭新构建的工件,或者我使用-U运行Maven以强制更新。

这对我很有用,YMMV。