如何使用货物部署特定的子项目:开始使用maven

时间:2010-07-05 11:43:03

标签: maven-2 cargo maven-cargo

我有一个开发的应用程序,我只是想简化构建过程。父级的POM文件如下所示:

<parent>
    <groupId>com.shc.obu.ca</groupId>
    <artifactId>shcobuca-pom</artifactId>
    <version>1.1.0</version>   </parent>

  <groupId>com.shc.obu.ca.osol</groupId> <artifactId>apps-pom</artifactId>   <version>${currVersion}</version>   <packaging>pom</packaging>   <name>Outlet Apps</name>

  <scm>
    <connection>scm:svn:https://ushofsvpsvn2.intra.searshc.com/svn/outlet/outlet/trunk/apps</connection>
    <developerConnection>scm:svn:https://ushofsvpsvn2.intra.searshc.com/svn/outlet/outlet/trunk/apps</developerConnection> </scm>
    <profiles>
    <profile> <id>www</id>
      <activation> <activeByDefault>true</activeByDefault> </activation>
      <modules>
        <module>www</module>
        <module>modules</module> 
      </modules>
    </profile>
    <profile> 
      <id>mts</id>
      <activation> <activeByDefault>true</activeByDefault> </activation>
      <modules>
        <module>mts</module> 
        <module>modules</module> 
      </modules>
    </profile>
    <profile> <id>search</id>
      <activation> <activeByDefault>true</activeByDefault> </activation>
      <modules>
        <module>modules</module> 
        <module>search</module> 
      </modules>
    </profile>   </profiles>

  <repositories>
    <repository>
      <id>obu.ca.repo.release</id>
      <snapshots><enabled>false</enabled></snapshots>
      <url>http://maven.cal.intra.sears.com/release</url>
    </repository>
    <repository>
      <id>obu.ca.repo.snapshot</id>
      <releases><enabled>false</enabled></releases>
      <snapshots>
        <enabled>true</enabled>
        <updatePolicy>interval:5</updatePolicy>
      </snapshots>
      <url>http://maven.cal.intra.sears.com/snapshot</url>
    </repository>   </repositories>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <env>trunk</env>
    <currVersion>1.2.0</currVersion>   </properties>   </project>

此文件显示它有三个基本上独立的子项目的配置文件。我将货物插件添加到此文件中,如下所示:

<build>
  <plugins>
      <plugin>
        <groupId>org.codehaus.cargo</groupId>
        <artifactId>cargo-maven2-plugin</artifactId>
        <version>1.0</version>
        <configuration>
          <container>
              <containerId>tomcat6x</containerId>
              <home>
                  C:\tools\apache-tomcat-6.0.26
              </home>
          </container>
          <configuration>
              <properties>
                  <cargo.servlet.port>
                      8082
                  </cargo.servlet.port>
                  <cargo.jvmargs>
                      "-Xdebug" "-Xrunjdwp:transport=dt_socket,address=4646,server=y,suspend=n"
                  </cargo.jvmargs>
              </properties>
          </configuration>     
        </configuration>  
      </plugin>
  </plugins>
  </build>

但是当我运行'mvn cargo:start'时,tomcat实例运行正常但没有部署子应用程序。有没有办法让我的第一个子应用程序(www)(生成一个名为www-webapp-1.2.0.war的war文件)自动部署?

更新:谢谢Pascal。我尝试修改build标签,如下所示:

<build>
  <plugins>
      <plugin>
        <groupId>org.codehaus.cargo</groupId>
        <artifactId>cargo-maven2-plugin</artifactId>
        <version>1.0</version>
        <configuration>
          <container>
              <containerId>tomcat6x</containerId>
              <home>
                  C:\tools\apache-tomcat-6.0.26
              </home>
          </container>
          <configuration>
              <properties>
                  <cargo.servlet.port>
                      8082
                  </cargo.servlet.port>
                  <cargo.jvmargs>
                      "-Xdebug" "-Xrunjdwp:transport=dt_socket,address=4646,server=y,suspend=n"
                  </cargo.jvmargs>
              </properties>              
              <deployables> 
                <deployable> 
                  <groupId>com.shc.obu.ca.osol</groupId> 
                  <artifactId>www-webapp-1.2.0</artifactId> 
                  <type>war</type> 
                  <properties> 
                    <context>acontext</context> 
                  </properties> 
                </deployable> 
              </deployables>               
          </configuration>    
        </configuration>  
      </plugin>
  </plugins>
  </build>

但它仍然不起作用。它给出了如下构建错误:

Artifact [com.shc.obu.ca.osol:www-webapp-1.2.0:war]不是项目的依赖项。 我尝试了'www-webapp'和'www'作为工件ID,但错误仍然相同。

当我向依赖标记添加相同内容时,它会产生某种循环引用错误,如下所示: '反应堆中的项目包含循环参考'

2 个答案:

答案 0 :(得分:2)

您需要将www模块列为要在<deployable>元素内部署的模块。来自Maven2 Plugin Reference Guide

  

如果未指定deployable且项目的包装为war,ear或ejb且未指定部署者,则生成的工件将自动添加到要部署的可部署列表中

由于您的项目的packaing类型为pom,因此它不适合部署,也不会部署任何内容。

以下是一个例子:

  <plugin>
    <groupId>org.codehaus.cargo</groupId>
    <artifactId>cargo-maven2-plugin</artifactId>
    <version>1.0</version>
    <configuration>
      <container>
        <containerId>tomcat6x</containerId>
        <home>C:\tools\apache-tomcat-6.0.26</home>
      </container>
      <configuration>
        <properties>
          <cargo.servlet.port>8082</cargo.servlet.port>
          <cargo.jvmargs>
              "-Xdebug" "-Xrunjdwp:transport=dt_socket,address=4646,server=y,suspend=n"
          </cargo.jvmargs>
        </properties>
        <deployables>
          <!-- application to deploy -->
          <deployable>
            <groupId>com.acme</groupId>
            <artifactId>mywebapp</artifactId>
            <type>war</type>
            <properties>
              <context>acontext</context>
            </properties>
          </deployable>
        </deployables>
      </configuration>     
    </configuration>  
  </plugin>

<强>更新

  

(...)它给出了构建错误,如下所示

     

Artifact [com.shc.obu.ca.osol:www-webapp-1.2.0:war]不是项目的依赖项。我尝试了'www-webapp'和'www'作为工件ID,但错误仍然相同。

我忘记了这一点,但看起来Cargo希望deployable成为货物启动项目的依赖。

  

当我向依赖标记添加相同内容时,它会产生某种循环引用错误,如下所示:'反应堆中的项目包含循环引用'

这是正常的。工件不能是子模块和给定项目的依赖项,或者您获得循环依赖(您需要依赖项来构建一个依赖,鸡和蛋问题的模块)。

我的建议是将货物配置移动到www模块或为您的功能测试创建一个专用模块(这通常是我所做的)并声明www作为此依赖关系模块。

答案 1 :(得分:1)

以下是如何使用Cargo进行多模块部署的示例。它有一个父项和三个模块,其中一个模块用货物部署所有三个模块。您可以从第三个模块运行mvn cargo:run以完成所有部署。

==================== PARENT 1 =========================

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.blah.test</groupId>
    <artifactId>blah-service</artifactId>
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>
    <modules>
        <module>blah-service-module1</module>
        <module>blah-service-module2</module>
        <module>blah-service-module3</module>
    </modules>
</project>

==================== MODULE 1 =========================

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.blah.test</groupId>
        <artifactId>blah-service</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <artifactId>blah-service-module1</artifactId>
    <packaging>war</packaging>
    <version>1.0-SNAPSHOT</version>
</project>

==================== MODULE 2 =========================

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.blah.test</groupId>
        <artifactId>blah-service</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <artifactId>blah-service-module2</artifactId>
    <packaging>war</packaging>
    <version>1.0-SNAPSHOT</version>
</project>

========== MODULE 3: the one which deploys all three with cargo =========================

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>com.blah.test</groupId>
        <artifactId>blah-service</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <artifactId>blah-service-module3</artifactId>
    <packaging>war</packaging>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <dependency>
            <groupId>com.blah.test</groupId>
            <artifactId>blah-service-module1</artifactId>
            <version>1.0-SNAPSHOT</version>
            <type>war</type>
        </dependency>
        <dependency>
            <groupId>com.blah.test</groupId>
            <artifactId>blah-service-module2</artifactId>
            <version>1.0-SNAPSHOT</version>
            <type>war</type>
        </dependency>
    </dependencies>


    <build>
        <plugins>
            <plugin>
                <groupId>org.codehaus.cargo</groupId>
                <artifactId>cargo-maven2-plugin</artifactId>
                <version>1.4.6</version>
                <configuration>
                    <container>
                        <containerId>jetty6x</containerId>
                        <type>embedded</type>
                    </container>
                    <deployables>
                        <deployable>
                            <groupId>com.blah.test</groupId>
                            <artifactId>blah-service-module1</artifactId>
                            <type>war</type>
                            <properties>
                                <context>api/blah/module1</context>
                            </properties>
                        </deployable>
                        <deployable>
                            <groupId>com.blah.test</groupId>
                            <artifactId>blah-service-module2</artifactId>
                            <type>war</type>
                            <properties>
                                <context>api/blah/module2</context>
                            </properties>
                        </deployable>
                        <deployable>
                            <groupId>com.blah.test</groupId>
                            <artifactId>blah-service-module3</artifactId>
                            <type>war</type>
                            <properties>
                                <context>api/blah/module3</context>
                            </properties>
                        </deployable>
                    </deployables>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>