Maven子模块未被构建

5

我有一个相对简单的多模块Maven构建,其中包含一个父POM和两个子模块:

<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”。由于某种原因,这不会运行clean和install阶段,但会执行部署操作。如果我从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.
3个回答

2

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

您需要将该目标绑定到WebApp子模块中以在安装阶段运行。 当前它正在顶层(pom!)模块上运行。

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

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

参见此文档中的示例C-1

如果您希望在所有其他模块构建完成后运行此操作,则需要执行以下操作之一:

  • 重新排序子模块,使WebApp为最后一个,然后按照上述方式操作
  • 或者,添加另一个子模块,该子模块将作为最后一个执行,并依赖于您的WebApp子模块。然后,告诉weblogic插件使用该.war文件,方法是指定以下属性maven.weblogic.war。您可能需要先使用dependency:copy目标,将其复制到最后一个子模块的目标目录中。

部署目标旨在在顶层运行。我想在部署开始之前安装所有子项目。上述代码仅在我仅安装WebApp级别时才相关,而在此情况下我不想这样做。 - andyfinch
你不能安装顶级项目。如果你想要安装所有的项目并将它们部署到你的Web服务器上,那么可以创建一个批处理脚本来完成这个任务。Maven和weblogic-maven-plugin不支持这种操作。 - Salandur
如果我不包括部署目标,我可以在顶层安装,这将按指定方式安装子模块。但是,为什么当我添加部署目标时,它决定不安装子项目呢?另外,如果我在子级别运行完整命令,它会执行安装和部署。 - andyfinch
我已经添加了另一个模块用于部署目的,它在安装阶段作为插件部署目标运行。此时其他模块已经被安装。感谢您的帮助。 - andyfinch

1
如果您想先运行所有项目的安装阶段,然后再将项目部署到Web服务器上,您需要拆分Maven调用。
mvn clean install
mvn weblogic:deploy

默认情况下,Maven 会按项目执行所有任务,要分开运行 Maven 任务,唯一的解决方法就是分别运行它们。


我曾考虑过这个问题,但我需要在一行上指定。我正在使用Teamcity,我认为命令不能像这样分开。 - andyfinch

0

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

从日志中可以看出,Maven先运行了父项目的cleaninstall目标,然后尝试运行weblogic:deploy目标。显然,weblogic:deploy不是与父项目相关的目标,因为它是用于部署子Web应用程序的。 Maven并不知道这一点,因此导致失败。

也许您应该重新考虑npellow的解决方案,因为它应该适合您的要求。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接