使用tomcat-maven-plugin部署预构建的WAR

hsi*_*siu 3 tomcat maven

我有一个由Warbler正确生成的WAR文件,当我手动执行此操作时它正在工作.

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

1)调用warble(成功)

<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>
Run Code Online (Sandbox Code Playgroud)

2)部署到tomcat

这是我遇到麻烦的第二部分.我想告诉maven接受我刚刚生成的WAR文件(并且有助于将其移动到目标/,正如它所期望的那样)并进行部署.

问题是,如果我没有为整个项目指定一个包装,它只是跳过任何部署("跳过非WAR").如果我指定WAR包装,它会尝试制作一个无用的WAR本身,这样就可以了,但它不断要求提供越来越多的信息(webxml等)来制作这个无用的WAR,我最后会删除并忽略它.

基本上,是否有一种简单的方式来说"把我刚刚在工作区/目标中创建的战争并像你自己制作的任何WAR一样部署到maven"?

Mae*_*rom 8

第一次发帖:)

对的,这是可能的.诀窍是禁用maven-war-plugin的执行,这样它就不会尝试打包任何东西.然后你可以简单地将tomcat指向你已经组装的预制战争.这是我的POM,它部署了prebuild 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>
Run Code Online (Sandbox Code Playgroud)

感谢waffel的Weblog为我提供了通用的解决方案,让我找到了如何禁用maven-war-plugin的执行.:)

*编辑:您可能还想禁用maven-install-plugin以防止maven在调用经常使用的'mvn clean install'时抱怨(消息看起来像这样:)

[错误]无法执行目标org.apache.maven.plugins:maven-install-plugin:2.3.1:在项目上安装(default-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>
Run Code Online (Sandbox Code Playgroud)

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