3

我有一个开发的应用程序,我只是想让构建过程变得简单。父级的 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 文件)自动部署?

更新:谢谢帕斯卡。我尝试修改构建标签如下:

<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,但错误仍然相同。

当我将其添加到依赖标签时,它会给出某种循环引用错误,如下所示:“反应器中的项目包含循环引用”

4

2 回答 2

2

您需要将您的www模块列为要在<deployable>元素内部署的模块。从Maven2 插件参考指南

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

由于您的项目具有packaingtype 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 期望 adeployable成为 Cargo 启动项目的依赖项。

当我将其添加到依赖标签时,它会给出某种循环引用错误,如下所示:“反应器中的项目包含循环引用”

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

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

于 2010-07-05T14:15:29.773 回答
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>
于 2014-01-17T16:16:51.343 回答