【问题标题】:Deploying prebuilt WAR with tomcat-maven-plugin使用 tomcat-maven-plugin 部署预构建的 WAR
【发布时间】:2011-05-24 17:01:45
【问题描述】:

我有一个由 Warbler 正确生成的 WAR 文件,当我手动完成所有这些操作时,它就可以工作了。

我正在尝试使用 maven(通过 Hudson)来

1) 调用啁啾(成功)

<phase>package</phase>
<configuration>
    <executable>/bin/bash</executable>
    <workingDirectory>.</workingDirectory>
    <arguments>
        <argument>-c</argument>
        <argument>
            echo "Sourcing bashrc"
            source ~/.bashrc
            rvm use jruby
            echo "Path is $PATH"
            echo "Gem path is $GEM_PATH"
            warble --trace
            rm -R target/*
            mv workspace.war target/yams.war
        </argument>
    </arguments>
</configuration>

2) 部署到 tomcat

这是我遇到问题的第二部分。我只想告诉 maven 获取我刚刚生成的 WAR 文件(并且如预期的那样移动到 target/ 很有帮助)并部署它。

问题是,如果我没有为整个项目指定打包,它只会跳过任何部署(“跳过非 WAR”)。如果我指定 WAR 打包,它会尝试自己制作一个无用的 WAR,这没关系,但它会不断要求越来越多的信息(webxml 等)来制作这个无用的 WAR,无论如何我最终都会删除并忽略它。

基本上,有没有一种简单的方法可以向 maven 说“将我刚刚在工作区/目标/中创建的战争并像你自己制作的任何 WAR 一样部署它”?

【问题讨论】:

    标签: tomcat maven


    【解决方案1】:

    第一次发帖:)

    是的,这是可能的。诀窍是禁用 maven-war-plugin 的执行,这样它就不会尝试打包任何东西。然后你可以简单地将tomcat指向你已经组装好的预构建战争。这是我的 POM,它部署了预构建 lambda Probe WAR 文件:

    <project>
        <modelVersion>4.0.0</modelVersion>
    
        <artifactId>Probe</artifactId>
        <packaging>war</packaging>
    
        <name>Probe</name>  
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-war-plugin</artifactId>
                    <version>2.1.1</version>
                    <executions>
                        <execution>
                            <id>default-war</id>
                            <phase>none</phase>
                        </execution>
                    </executions>                    
                </plugin>
                <plugin>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>tomcat-maven-plugin</artifactId>
                    <configuration>
                        <warFile>Probe.war</warFile>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    </project>
    

    感谢 waffel's Weblog 为我提供了通用解决方案,让我弄清楚如何禁用 maven-war-plugin 的执行。 :)

    *edit:您可能还想禁用 maven-install-plugin 以防止 maven 在您调用常用的“mvn clean install”时抱怨(消息如下所示:)

    [ERROR] 未能执行目标 org.apache.maven.plugins:maven-install-plugin:2.3.1:install (默认安装)在项目上:这个的包装 项目未将文件分配给构建工件

    将此部分添加到您的 POM:

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-install-plugin</artifactId>
                <version>2.3.1</version>
                <executions>
                    <execution>
                        <id>default-install</id>
                        <phase>none</phase>
                    </execution>
                </executions>
            </plugin>
    

    如果您希望您的项目将战争文件实际安装到您的存储库中,我认为您将无法使用 maven-install-plugin 的 install:install-file 目标。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-20
      • 1970-01-01
      • 2013-03-27
      • 1970-01-01
      • 2013-01-06
      • 2012-08-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多