org.codehaus.cargo.container.ContainerException:无法创建可部署的

时间:2014-05-13 22:23:45

标签: java eclipse maven cargo-maven2-plugin

在maven pom文件中,我的项目包装类型是“jar”,如下所述。

<packaging>jar</packaging>

来自遗留代码的pom.xml文件中的我的cargo-maven2-plugin配置。我尝试运行Eclipse Kelpler,但由于插件配置没有提到cargo-maven2-plugin版本(我不知道这个配置的实际版本),Eclipse尝试获得最新的1.4.8。根据配置,Tomcat版本看起来像6.0.14,但容器ID是5x。整个配置似乎不对,我试着让它工作。有什么建议?包类型必须是jar,我无法改变它。

                <plugin>
                    <groupId>org.codehaus.cargo</groupId>
                    <artifactId>cargo-maven2-plugin</artifactId>
                    <configuration>
                        <wait>${cargo.wait}</wait>
                        <container>
                            <containerId>tomcat5x</containerId>
                            <zipUrlInstaller>
                                <url>
                                    http://archive.apache.org/dist/tomcat/tomcat-6/v${tomcat.version}/bin/apache-tomcat-${tomcat.version}.zip
                                </url>
                                <installDir>${installDir}</installDir>
                            </zipUrlInstaller>
                        </container>
                        <configuration>
                            <home>${project.build.directory}/tomcat5x/container</home>
                            <properties>
                                <cargo.hostname>${cargo.host}</cargo.hostname>
                                <cargo.servlet.port>${cargo.port}</cargo.servlet.port>
                            </properties>
                            <deployables>
                                <deployable>
                                    <properties>
                                        <context>ROOT</context>
                                    </properties>
                                </deployable>
                            </deployables>
                        </configuration>
                    </configuration>
                    <executions>
                        <execution>
                            <id>start-container</id>
                            <phase>pre-integration-test</phase>
                            <goals>
                                <goal>start</goal>
                            </goals>
                        </execution>
                        <execution>
                            <id>stop-container</id>
                            <phase>post-integration-test</phase>
                            <goals>
                                <goal>stop</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>  

            </plugins>
        </build>
    </profile>
</profiles>
<properties>
    <cargo.host>localhost</cargo.host>
    <cargo.port>25888</cargo.port>
    <cargo.wait>false</cargo.wait>
    <tomcat.version>6.0.14</tomcat.version>
</properties>

我将类型设置为“jar”以匹配项目。但是当我在Eclipse Kelper中运行maven build时,我收到了以下错误消息。如您所见,没有允许的类型“jar”列出。有人可以帮忙吗?

org.codehaus.cargo.container.ContainerException: Cannot create deployable. There's no registered deployable for the parameters (container [id = [default]], deployable type [jar]). Valid types for this deployable are: 
  - ear
  - war
  - rar
  - bundle
  - file
  - sar
  - ejb

1 个答案:

答案 0 :(得分:0)

根据Cargo's Tomcat 5.x doc,只有war文件可以部署到tomcat,这就是它失败的原因。为什么不使用war来创建webapp?我不了解您的要求,但通常如果您在Tomcat上部署,则在war文件中有一个webapp。你需要做什么?你的项目中有servlet或jsp文件吗?您是否需要将其用作其他Web应用程序的库?

您可以创建一个Web应用程序,并将该项目生成的jar包含为依赖项。使用org.apache.marmotta:marmotta-archetype-webapp Maven原型创建项目并将遗留项目依赖项添加到pom中,它将是这样的:

<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>test.war</groupId>
  <artifactId>test-war</artifactId>
  <packaging>war</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>test-war Maven Webapp</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
  <build>
    <finalName>test-war</finalName>
  </build>
  <dependencies>
      <dependency>
          <groupId>legacyProjectGroupId</groupId>
          <artifactId>legacyProjectArtifactId</artifactId>
          <version>legacyProjectVersion</version>
      </dependency>
  </dependencies>
</project>