使用eclipse将maven项目部署tomcat, 以及如何实现热部署

在以前,我每次部署项目的时候都是关闭tomcat并开启tomcat,完成代码的编译并部署到tomcat上,现在想想,感觉当时怎么不去了解去如何部署到tomcat有几种方式,elispe 创建的web项目部署到tomcat的原理。若是了解了,估计很多时间都不会停留在关闭和开启tomcat上吧,当然这里也是说说而已。

目前,我是想把maven项目web工程部署到tomcat上,有以下方式可以部署到tomcat上。

1. 简单粗暴式,将maven项目web工程当作是web项目,在server上进行添加,并开启eclipse上的tomcat,这样项目就会部署到tomcat的wabapp目录下:

  

      

     

     

     这种方式是最常见了,也是web项目最常用的,如果搭建的单单只是web项目,而非maven项目(web工程)的话,可以使用此方法,部署的速度快,同时可以去设置边改代码,边更改内容,算是web项目的热部署了

     当然这是针对web项目而言,而非maven项目,也就是说项目是maven项目的话,每次修改jave都要关闭tomcat并开启tomcat,才能更改内容,非常麻烦。

 

2. tomcat 在网址上进入localhost:8080/manager(假设是本地tomcat),在这个里面可以添加web项目,第二种方式类似与这种,但不用通过访问localhost:8080/manager进行部署,而是通过maven的配置进行部署,以下是步骤

    (1) 修改tomcat的配置文件,建议使用eclipse进行修改

    

  修改tomcat-users.xml文件,并添加以下代码

<role rolename="manager-gui"/>
  <role rolename="manager"/>
  <role rolename="manager-script"/>
  <user username="admin" password="123" roles="manager-gui,manager-script"/>
View Cod

    (2) 启动tomcat,在外部启动或者在eclipse中启动,并在网页上输入localhost:8080/manager(假设是本地tomcat的话),提示输入用户和密码,输入tomcat-users.xml里设置的用户名和密码,出现以下的界面就算是配置成功了

  

  

    (3) 在maven项目中,配置pom.xml文件,在bulid 标签--> plugins 中添加以下代码,该代码的作用是指向指定的tomcat

<plugin>
    <groupId>org.apache.tomcat.maven</groupId>
    <artifactId>tomcat7-maven-plugin</artifactId>
    <version>2.1</version>
    <configuration>
     <!-- 
                此处url,本地的话最好是以IP地址的形式
                tomcat6或以下版本应是http://ip:port/manager/html
                tomcat7为http://ip:port/manager/text,
                我的tomcat是7
         -->
      <url>http://127.0.0.1:8080/manager/text</url>
     <!-- 此处的名字必须和setting.xml中配置的ID一致 -->
     <server>tomcat7</server>
    <!-- 此处的名字是项目发布的工程名 -->   
        <path>/${project.build.finalName}</path>
    </configuration>
</plugin>                            
View Code

    (4)在maven项目上右键,选择run as --> maven bulid,第一点击的时候,会让你创建下图:

         在Name值可以修改也可以不修改,只是区分maven bulid的名字

         在Goals中,若是第一次部署项目,填写tomcat7:deploy;之后部署项目,都是使用tomcat7:redeploy (ps:这里的tomcat7,我还没有验证是因为我使用的tomcat版本是tomcat 7,还是因为在maven的setting.xml文件中设置了server的Id是tomcat7,以后确定哈,当然你们可以去试一下,然后告诉我^_^)

  

    创建完后,点击run件,在context出现类似信息代表已经部署成功。

  

    可以去http://ip:port/manager中查看是否有项目部署上去。

 

    这样就部署上去了,这里部署的名称因为是根据项目名,eclipse的项目名包含着版本信息。点击连接便可以进入该项目的默认连接(项目名/index.html)。

    能部署成功也有部署失败的,下面是我部署失败时的截图和解决原因:

    1. 编译出错,如下图

        

         解决:maven项目的jdk版本与编译的java版本(eclipse配置的java版本)不一致,出现了编译出错。将maven项目的java版本与编译版本一致便可

                    1. 右键maven项目Bulid Path --> Configure Bulid Path,删除原有的JRE System Libray的java版本,添加新的java版本

                        

         2. 在maven项目中pom.xml添加编译版本,代码如下:

<!-- 编码  -->
<plugin>
    <!-- -->
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.5.1</version>
    <configuration>
        <!-- 根据自己的java的版本,我的是java 8 -->
        <source>1.8</source>
        <target>1.8</target>
    <encoding>UTF-8</encoding>
    </configuration>
</plugin>   
View Code

                        弄好后,项目会出现错误,原因是因为pom.xml指定的jave版本与项目的不一致,右键maven项目,选择maven --> Updata Project 便可以解决

                   3. 为了在创建maven项目时,项目的版本与编译的版本一致,可以去修改maven 位置下conf --> setting.xml文件,在profiles标签下添加如下代码:

      <profile>  
        <id>JDK1.8</id>  
        <activation>  
            <activeByDefault>true</activeByDefault>  
        </activation>  
        <properties>  
            <!-- 根据自身的java版本(eclipse配置的java版本) -->
            <maven.compiler.source>1.8</maven.compiler.source>  
            <maven.compiler.target>1.8</maven.compiler.target>  
            <encoding>UTF-8</encoding>  
        </properties>  
    </profile>

        这样创建出来的maven项目java版本与编译的java版本一致     

补充一点,maven项目很奇怪,明明配置的Java版本都与编译的java版本一致,可一旦新增了java文件,部署时还是会出现编译出错的问题,这点我就不知道原因了,只知道右键maven项目,maven --> Updata Project 后,可以解决这个问题。(猜测是因为maven项目所新增的java文件对应java版本与项目的java版本不一致,造成冲突,因为都要去设置java版本的问题,目前没有一劳永逸的办法,如果网友有解决方案,可以在评论里说,感谢你的参与)

  这种部署的方式,可以省去开启和关闭tomcat的时间,大大减少了开发时间。

 

 3. 我们通过第一种方式部署时,我们的项目会出现tomcat --> webapp文件夹下,并可以网址访问。这个项目之所以会存放在webapp下,是因为eclipse将项目以项目的形式编译成class文件,并传到tomcat下的webapp,而tomcat只所以知道webapp下有那些项目,是因为tomcat在启动的过程或是运行的过程中,扫描了webapp文件,并将不是原本的项目编写入conf --> server.xml文件中,会出现以下代码:

 

       这里的docBase是只项目的位置,默认的相对路径是tomcat下的webapp目录。

       path是指网络访问的项目名,以上配置即http://ip:port/HJLTest

       reloadable 是否要时时观察项目下的class等资源文件的改变,若为true,则可以实现热部署,即编写代码可以不用关闭服务器便可改变内容。若为false,则需要删除项目,重新部署项目才可改变内容

  知道了这个,我们便可以实现热部署,这也是第三个部署方案的原理。要对maven项目实现该部署方案,步骤如下:

            1. 将maven编译好的位置确定,并将docBase的值指向这个位置

            2.确定好访问的项目命,即path的值,浏览器上靠这个项目进行访问

            3. reloadable 的值一定要设置true ,不然实现热编译,没有意义

            步骤2和3都比较好处理,这里细讲步骤1,流程如下:

              maven项目右键 Bulid Path -->Configure Bulid Path -->Source栏,这里一共有4个目录:src/main/java,resources ;src/test/java,resource。将src/main/java,resources的编译输出位置修改:

         

       双击Output folder,选择默认的输出路径

                

                  在最下面Allow output folders for sourse folders选项打勾,并设置输出class的路径,路径的话,最好放置在WEB-INF/classes的文件下,可以参照web项目使用部署一的方式查看部署到tomcat webapp下项目的文件结构,要以此结构为准。

                

                配置好后,右键项目 run as --> maven install 运行,成功后,去到项目的位置上查看是否有对应的class文件(ps: 这里可能会出现java 版本不对的错误,maven项目右键 maven -->Updata Project便可以了)

                

                

                 上述步骤成功后,便可以去tomcat --> conf --> server.xml中 Host标签中设置Context标签,并设置doxBase的值:

                 我的话是指向项目的src/main/webapp目录:

                 

        完成上述三步骤后,启动tomcat,打开http://ip:port/manager,便出现配置的项目:

        

         

          编写java文件后,city+s保存,返回刷新网页,发生改变,实现真正的热部署:

          

          

           补充:该方式虽然能实现热部署,但如果修改了xml文件的话,便要重新部署这点我也不知道原因,又空的时候查看一下,有网友知道也可以评论回复我,感谢你的参与

 

总结: 第一种部署方式不建议使用,若是在开发阶段,推荐第三种部署方式,若是放置于服务器,可以考虑第二种方式。关于第二种部署方式,可以在此基础上弄成多服务器部署,感兴趣的可以去看我的下一个博客,maven实现多部署服务器。

希望该篇随笔对你有帮助,有补充的也可以在评论回复,我会更新,谢谢观看与评论!!

 

 

        

 

 

 

 

 

 

            

 

posted @ 2019-07-19 21:58  HJLのH  阅读(517)  评论(0编辑  收藏  举报