6

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

我现在在一个 FOSS 项目(还有一个 Maven 原型)中遇到了这个问题,我想在其中使用 Maven 的最佳实践
这是一个多模块项目,其中一个 webapp 子模块取决于其他模块,让我担心的是与(或)一起开发的简易性。mvn jetty:runjetty:start

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

  1. prod,默认的,声明对其他子模块的依赖;
  2. dev另一方面,依赖于其他模块,并jetty-maven-plugin通过将其他模块的输出目录添加为extraClasspath和来配置resourcesAsCSV
    这样,我可以mvn package一次又一次cd webapp && mvn jetty:start -Pdev地快速迭代,重新加载 web 应用程序,而无需停止服务器。

AFAICTextraClasspath是为此目的而添加的(JETTY-1206)。
我被指出在tomcat7-maven-plugin使用 Maven 3 时可以从反应堆构建中解析模块(我提出了一个问题以将其带到 Jetty:JETTY-1517),但这几乎不能解决我的问题

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

所以这是我的问题:mvn install真的那么普遍吗?或者我将反应堆内依赖项仅放在prod配置文件中的方法好吗?

(请注意,我有完全相同的问题gwt-maven-plugin,所以请不要告诉我简单地切换到 Tomcat;这实际上根本行不通,详情请点击此处

4

3 回答 3

1

The mvn install is common in particular in relationship with multi-module builds, cause it will give you the chance to run a single module from your multi-module build.

This can be achieved by using:

mvn -pl submodule LifeCycle
于 2012-05-21T14:40:11.703 回答
1

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

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

但是,这仅在可以跳过插件(即具有skip配置)并且仅在一个特定子模块中使用时才有效,并且必须为您需要/想要以这种方式运行的每个插件有选择地完成(在我的情况下,jetty:run并且gwt:run) .

于 2012-08-21T09:56:33.670 回答
0

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

当我完成开发后,我提交对共享 SCM 的更改,并让 Jenkins 构建并将代码部署到共享远程仓库。然后我要么删除本地存储库中更改的项目,以便下一次构建删除新构建的工件,要么我使用 -U 运行 Maven 来强制更新。

这对我很有效,YMMV。

于 2012-05-22T02:39:41.410 回答