2011-03-28 130 views
5

我有一个亲戚简单的多模块maven buid与父pom。这包括2个模块如下:未构建Maven子模块

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

当我运行MVN清洁的顶层安装 POM它清除&安装每个子模块的预期。不过,我现在正在尝试添加一个插件(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. 

回答

2

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

您需要在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目标,以进入最后一个子模块的目标目录。
+0

部署目标是为了在顶层运行。我想在部署开始之前执行安装以构建所有子项目。上述代码仅与仅在我不想在此实例中进行的Web应用程序级别安装有关。 – andyfinch 2011-03-28 10:26:06

+0

您无法安装顶层项目。如果你想安装所有的项目,然后将它们部署到你的网络服务器,创建一个批处理脚本就是如此。 Maven和weblogic-maven-plugin不支持这一点。 – Salandur 2011-03-28 10:46:19

+0

当我不包含部署目标时,我可以安装在顶层。这将按照指定安装子模块。为什么当我添加部署目标时,它决定不安装子项目。此外,为什么如果我在子级上运行完整命令,它是否会执行安装和部署。 – andyfinch 2011-03-28 10:51:32

1

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

mvn clean install 
mvn weblogic:deploy 

默认情况下,Maven的执行每个项目的所有任务,并分离行家任务的唯一解决办法分开运行。

+0

我的确想到了这一点,但我需要在一行中指定。我使用TeamCity,我不认为这些命令可以分开。 – andyfinch 2011-03-28 10:57:54

0

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

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

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

+0

答复npellows的答案 – andyfinch 2011-03-28 15:04:33