【问题标题】:Maven child modules not being built未构建 Maven 子模块
【发布时间】:2011-07-24 08:44:31
【问题描述】:

我有一个带有父 pom 的相对简单的多模块 maven buid。这包括以下 2 个子模块:

<modules>
    <module>WebApp</module>
    <module>WebService</module>
</modules>

当我在顶级 pom 上运行 mvn clean install 时,它会按预期清理并安装每个子模块。但是我现在正在尝试添加一个插件(codehaus weblogic)目标以将 WebApp .war 部署到 Weblogic 10.3.4,例如mvn clean install weblogic:deploy。出于某种原因,这不会运行清理和安装阶段,而是执行部署。如果我从 WebApp 目录中运行命令,它会在进行部署之前进行清理和安装。

如果在顶层运行目标,我是否缺少一些不会运行子生命周期阶段的问题。这是命令行输出:

[INFO] Scanning for projects...
[INFO] Reactor build order: 
[INFO]   SupportClient
[INFO]   SupportClient-WebServices
[INFO]   SupportClient-WebApp
[INFO] Searching repository for plugin with prefix: 'weblogic'.
[INFO] org.apache.maven.plugins: checking for updates from central
[INFO] org.codehaus.mojo: checking for updates from central
[INFO] ------------------------------------------------------------------------
[INFO] Building SupportClient
[INFO]    task-segment: [clean, install, weblogic:deploy]
[INFO] ------------------------------------------------------------------------
[INFO] [clean:clean]
[INFO] [site:attach-descriptor]
[INFO] [install:install]
[INFO] Installing C:\Development\Destin8SupportClient\pom.xml to C:\Users\finchaj.HPH\.m2    \repository\com\mcpplc\supportClient\supportClient\1.0\supportClient-1.0.pom
[INFO] [weblogic:deploy]
[INFO] Weblogic Deployment beginning with parameters DeployMojoBase[adminServerHostName = localhost, adminServerProtocol = t3, adminServerPort = 8001, userId = xx, password = ****, artifactPath = C:\Development\Destin8SupportClient/WebApp/target/WebApp.war, projectPackaging = war, name = support-client-webapp, targetNames = AdminServer, remote = false]
[INFO] Weblogic Deployment parameters [-adminurl, t3://localhost:8001, -username, xx, -password, xx, -name, support-client-webapp, -targets, AdminServer, -source, C:\Development\Destin8SupportClient/WebApp/target/WebApp.war, -deploy]
weblogic.Deployer invoked with options:  -adminurl t3://localhost:8001 -username xx-name support-client-webapp -targets AdminServer -source C:\Development\Destin8SupportClient/WebApp/target/WebApp.war -deploy
The file, 'C:\Development\Destin8SupportClient/WebApp/target/WebApp.war', does not exist.

【问题讨论】:

    标签: maven-2 maven build-process maven-plugin


    【解决方案1】:

    它在顶级(pom!)模块上运行 weblogic:deploy 目标。此目标只能在 war 或 ear 模块上运行。

    您需要在 WebApp 子模块中绑定该目标才能在安装阶段运行。 它目前在顶级(pom!)模块上运行。

    例如尝试将以下内容添加到 Webapp 子模块中的 weblogic 配置中。

      <executions> 
         <execution> 
            <phase>install</phase> 
              <goals> 
                <goal>deploy</goal> 
              </goals> 
         </execution> 
       </executions> 
    

    另见Example C-1 in this documentation

    如果您希望在构建结束时运行此程序,则在构建所有其他模块后,您将需要:

    • 重新排序您的子模块,因此 WebApp 排在最后,然后按上述操作
    • 或者,添加另一个最后执行的子模块,这取决于您的 WebApp 子模块。然后,通过指定以下属性 maven.weblogic.war 告诉 weblogic 插件使用该 .war 文件。您可能希望首先使用dependency:copy 目标,以进入最后一个子模块的目标目录。

    【讨论】:

    • 部署目标是为了在顶层运行。我想在部署开始之前进行安装以构建所有子项目。上面的代码仅在我仅在 WebApp 级别安装时才相关,在这种情况下我不想这样做。
    • 无法安装顶层项目。如果您想安装所有项目,然后将它们部署到您的网络服务器,请创建一个执行此操作的批处理脚本。 Maven 和 weblogic-maven-plugin 不支持这个。
    • 当我不包括部署目标时,我可以在顶层安装。这将按照指定安装子模块。为什么当我添加部署目标时它决定不安装子项目。还有为什么如果我在子级运行完整命令它会执行安装和部署。
    • 我添加了另一个用于部署目的的模块,它运行插件部署目标作为其安装阶段的一部分。此时其他模块已经安装完毕。谢谢你的帮助。
    【解决方案2】:

    如果您想首先为所有项目运行安装阶段,然后将项目部署到您的网络服务器,您必须拆分 maven 调用。

    mvn clean install
    mvn weblogic:deploy
    

    默认情况下,maven 会执行每个项目的所有任务,而将 maven 任务分开是单独运行它们的唯一解决方案。

    【讨论】:

    • 我确实想到了这一点,但我需要在一行上指定。我正在使用 Teamcity,但我认为不能像这样分隔命令。
    【解决方案3】:

    maven 首先在父项目上运行所有指定的目标,然后在子项目上运行。

    从日志中可以看出,maven 运行了父级的 cleaninstall 目标,然后尝试运行 weblogic:deploy 目标。现在,weblogic:deploy 显然不是与父级相关的目标,因为它旨在部署子 webapp。 maven 不知道这一点,因此失败了。

    也许您应该重新考虑 npellow 的解决方案,因为它应该可以满足您的要求。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-11
      • 1970-01-01
      • 1970-01-01
      • 2012-05-30
      • 2022-11-01
      • 1970-01-01
      • 2014-10-30
      • 2012-01-08
      相关资源
      最近更新 更多