没有构建Maven子模块

时间:2011-03-28 10:02:20

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

我有一个亲戚的简单多模块maven buid和父pom。这包括2个子模块,如下所示:

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

当我在顶层pom上运行 mvn clean install 时,它会清理&amp;按预期安装每个子模块。但是我现在正在尝试添加一个插件(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.

3 个答案:

答案 0 :(得分:2)

它在顶级(pom!)模块上运行weblogic:deploy目标。此目标只能在战争或耳朵模块上运行。

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

e.g。尝试将以下内容添加到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目标,以获取最后一个子模块的目标目录。

答案 1 :(得分:1)

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

mvn clean install
mvn weblogic:deploy

默认情况下,maven为每个项目执行所有任务,并将maven任务分开,以便单独运行它们。

答案 2 :(得分:0)

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

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

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