【问题标题】:How to copy .war to Tomcat's webapps directory using Maven?如何使用 Maven 将 .war 复制到 Tomcat 的 webapps 目录?
【发布时间】:2022-01-23 20:34:56
【问题描述】:

有什么我可以添加到pom.xml 的东西,可以将生成的.war 文件从target 目录复制到我的Tomcat 的webapps 目录吗?

【问题讨论】:

    标签: maven maven-plugin


    【解决方案1】:
    <build>
       <plugins>
         <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <version>3.2.1</version>
            <configuration>
               <outputDirectory><!-- Tomcat webapps location--></outputDirectory>
               <!-- Example of Tomcat webapps location :D:\tomcat\webapps\ -->
            </configuration>
          </plugin>
        </plugins>
    </build>
    

    将它添加到pom.xml 后,您可以通过调用mvn packagemvn war:war 来复制WAR 文件。

    【讨论】:

    • 谢谢 :) 这行得通。 OP 应将其标记为已验证的答案。
    【解决方案2】:

    【讨论】:

    • 要添加的代码是:maven-war-plugin artifactId的配置标签中的
    • 如果 webapps 文件夹位于远程服务器上(例如,它可以通过 SCP 复制吗?),怎么能做到这一点。我正在尝试使用 maven-wagon-ssh 库来做到这一点,它几乎可以工作,但我不知道如何控制发送哪些文件以及它们去哪里。
    【解决方案3】:

    这是正确的做法:

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>2.3</version>
                <configuration>
                 <warName>${name}</warName>
                 <outputDirectory>C:\Tomcat7\webapps</outputDirectory>
                </configuration>
            </plugin>
    

    这将在 C:\Tomcat7\webapps 文件夹中放置一个带有 maven 项目名称的 war 文件。

    【讨论】:

    • 不,不是。这是非常hacky的方式。
    【解决方案4】:

    您可以使用http://cargo.codehaus.org/Deploying+to+a+running+container 并进行相应的配置。

    【讨论】:

    【解决方案5】:

    你也可以看看码头插件。只需输入“mvn jetty:run-war”,码头就会运行你的战争文件。

    编辑:Jetty 是一个适合开发和测试的轻量级 servlet 容器。启动速度也快如闪电。

    【讨论】:

    • 我不想运行war文件。我希望将它放在 tomcat 的 webapps 目录中,而不必手动进行。
    【解决方案6】:

    或者,您可以让 tomcat 查看您的目标目录并直接从那里部署。

    在您的 context.xml 或 server.xml 的 Context 元素中:

    <Context path="" docBase="/path/to/target/exploded">
    ...
    </Context>
    

    然后你可以使用 war:exploded 目标来创建你的爆炸战争。

    【讨论】:

    • 您能否提供有关如何设置的更多信息。我过去曾这样做过,但谷歌无法找到示例配置。
    • 提升这个答案。尽管许多其他方法都有效,但这对我来说是迄今为止最快的(构建 1.5 分钟,而次快方法为 7 分钟)
    【解决方案7】:

    不理想,但如果你有一个非常奇怪的应用服务器设置,你总是可以在打包运行时使用 antrun 任务集来执行

    <build>
        ....
        <plugins>
           <plugin>
              <artifactId>maven-antrun-plugin</artifactId>
              <executions>
                <execution>
                  <phase>package</phase>
                  <configuration>
                    <tasks>
                      <!-- Ant copy tasks go here -->
                    </tasks>
                  </configuration>
                  <goals>
                    <goal>run</goal>
                  </goals>
                </execution>
              </executions>
            </plugin>
         </plugins>
      </build>
    

    【讨论】:

      【解决方案8】:

      感谢以上所有回答。

      以下答案对我有用。这只是一个合并的。没什么特别的!

      </project>
       ........ 
         <build>
          <finalName>HelloWorld1</finalName>
          <plugins>
              <plugin>
                  <groupId>org.apache.maven.plugins</groupId> 
                  <artifactId>maven-war-plugin</artifactId>
                  <configuration>
                      <outputDirectory>C:\Program Files (x86)\apache-tomcat-8.5.8\webapps\</outputDirectory>
                  </configuration>
              </plugin>
          </plugins>
        </build>
      </project>
      

      了解更多信息。请参考dependency:copy官方 页面了解更多信息。

      【讨论】:

      • 警告 - 此技术不会在 &lt;project&gt;/target 目录中创建 war 文件,然后将其复制到 outputDirectory 中。这直接在outputDirectory 中构建它。因此,如果您希望在 target 目录中获得一份 war 文件的副本,那么它不会存在。
      【解决方案9】:

      您也可以使用dependency plugin 来执行此操作

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-01-01
        • 2013-03-27
        • 1970-01-01
        • 2011-07-31
        • 1970-01-01
        • 2018-08-18
        • 2020-10-12
        • 1970-01-01
        相关资源
        最近更新 更多