我有一个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>
2)部署到tomcat
这是我遇到麻烦的第二部分。我想告诉maven接受我刚刚生成的WAR文件(并按照预期将其移动到目标/)并部署它。
问题是,如果我没有为整个项目指定包装,它只会跳过任何部署(“跳过非WAR”)。如果我指定WAR包装,它会尝试制作一个无用的WAR本身,这样就可以了,但它不断要求提供越来越多的信息(webxml等)来制作这个无用的WAR,我最后会删除并忽略它。
基本上,有没有一种简单的方法可以说“把我刚刚在工作区/目标中创建的战争并像你自己制作的任何WAR那样部署到maven?”
答案 0 :(得分: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>
感谢waffel's Weblog为我提供了通用的解决方案,让我弄清楚如何禁用maven-war-plugin的执行。 :)
*编辑:您可能还想禁用maven-install-plugin以防止maven在调用经常使用的'mvn clean install'时抱怨(消息如下所示:)
[错误]无法执行目标 org.apache.maven.plugins:Maven的安装,插件:2.3.1:安装 项目的(默认安装):此包装 project没有将文件分配给构建工件
将此部分添加到您的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>
如果您希望项目实际将war文件安装到您的存储库中,我认为您将无法使用maven-install-plugin的install:install-file目标。