我希望我的构建过程将我的战争部署到远程服务器。直到现在我已经跑了mvn clean install tomcat7:deploy
这对我来说似乎不对,因为它应该是deploy
阶段的一部分。但如果我尝试做mvn deploy
我得到:
Deployment failed: repository element was not specified in the POM inside distributionManagement element or in -DaltDeploymentRepository=id::layout::url parameter
由于我没有定义要部署的任何存储库(我真的不想部署到远程存储库,只是使用此阶段来执行tomcat maven插件...)
我希望能够在不部署到任何远程存储库的情况下运行tomcat maven插件。这可能吗?
答案 0 :(得分:7)
默认情况下,插件不会执行。你必须为它添加一个执行,或者像你一样调用它(例如,mvn clean install tomcat7:deploy)。
Tomcat上的部署与Maven部署阶段/部署到远程存储库无关。
要将Tomcat部署绑定到某个阶段,请将以下内容添加到tomcat maven插件配置中:
<executions>
<execution>
<id>tomcat-deploy</id>
<phase>pre-integration-test</phase>
<goals>
<goal>deploy</goal>
</goals>
</execution>
</executions>
在此配置中,Tomcat的部署将在预集成测试阶段进行,这是我认为最常见的阶段。
答案 1 :(得分:1)
解决方案是将其绑定到配置文件。
<profile>
<id>webapp-deploy</id>
..
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<executions>
<execution>
<id>tomcat-deploy</id>
<phase>install</phase>
<goals>
<goal>deploy-only</goal>
</goals>
</execution>
</executions>
</plugin>
..
</profile>
然后运行-Pwebapp-deploy
答案 2 :(得分:1)
这是因为Maven(在一个超级加重的决定中)决定选择“部署”这个词。&#34;在Maven世界中,部署意味着获取刚刚构建的二进制文件并将其上载/存储在本地maven存储库中。不要将新构建的战争部署到服务器上。
大多数Java开发人员会考虑&#34;发布&#34;一件神器实际上是一个&#34; deploy&#34;到了maven。
如果你认为maven只关心依赖管理的构建,那会很有帮助。构建依赖关系管理之外的任何内容都需要特殊调用(如tomcat7:redeploy)或不同的脚本环境。