【亲测】在Eclipse使用Maven自动打包部署到服务器上

前言

本来我想用jekins+docker来自动打包部署到服务器上,但是docker研究的不深,遇到问题就GG了,所以换一种简单的方式来打包部署。

思考

在自动打包部署之前,我们需要分析一下如何打包,并解决下面几个问题:

  1. 如何使用Maven进行打包?
  2. 如何使用Maven自动部署到远程服务器上?

实战

首先我们解决第一个问题,如何使用Maven进行打包?

  • Maven中通过插件来进行打包,一个网站项目必然存在资源(xml、properties等)和java文件,所以可以使用maven-resources-plugin来处理资源文件以及maven-compiler-plugin来编译java文件
  • 在pom.xml文件中添加如下代码:
<build>
        <finalName>ref-comet</finalName>
        <resources>
            <!-- 配置文件 -->
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>false</filtering>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>false</filtering>
            </resource>
        </resources>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-resources-plugin</artifactId>
                <version>2.7</version>
                <configuration>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.2</version>
                <configuration>
                    <source>1.7</source>
                    <target>1.7</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
        </plugins>

然后解决我们第二个问题,Maven怎么打包到远程服务器?

  • 首先我们要保证本地可以访问到远程服务器,所以需要在tomcat中配置用户权限,并需要在本地浏览器测试远程Tomcat服务器是否可以访问
  • 找到远程Tomcat服务器的tomcat/conf/tomcat-users.xml,在tomcat-users节点中,添加如下子节点,username和password是需要登录到远程Tomcat的用户名和密码。注意:正式环境,请确保用户名和密码使用特殊字符,不易被破解
<role rolename="admin-gui"/>
<role rolename="admin-script"/>
<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<role rolename="manager-jmx"/>
<role rolename="manager-status"/>
<user username="tomcat" password="tomcat" roles="manager-gui,manager-script,manager-jmx,manager-status,admin-script,admin-gui"/>
  • 成功访问(如果是Tomcat8.5.x版本,请移步到坑点)


    访问192.168.21.10:8081

    点击Manager App
  • 在pom.xml文件中配置打包到远程服务器的必需参数,大家可以把这段代码和上面代码整合到一起去
<build>
        <finalName>ref-comet</finalName>
        <pluginManagement>
            <plugins>
                <!-- 配置Tomcat插件 -->
                <plugin>
                    <groupId>org.apache.tomcat.maven</groupId>
                    <artifactId>tomcat7-maven-plugin</artifactId>
                    <version>2.2</version>
                    <configuration>
                        <!-- 先测试本地 -->
                        <!-- <url>http://192.168.1.235:8888/manager/text</url> -->
                        <!-- 填写远程服务器地址 -->
                        <!-- <url>http://192.168.21.10:8081/manager/text</url> --> 
                        <!-- 远程tomcat管理用户名 -->
                        <username>tomcat</username>
                        <!-- 远程tomcat管理密码 -->
                        <password>tomcat</password>
                    </configuration>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>

最后一步,直接通过eclipse来发布,右键项目->Run As->Maven build...->设置goals:clean install tomcat7:deploy


发布

坑点

  1. Tomcat8.5在浏览器上测试登录远程Tomcat Manager时,出现”403 Access Denied”
    Tomcat8.5加入了ip授权机制,默认仅支持本地访问,所以会抛出权限不足异常
    解决方式:
    找到tomcat/webapps/manager/META-INF/的context.xml文件,注释掉下面这一段或者添加\d+.\d+.\d+.\d+,来支持其他ip访问当前tomcat
# <Valve className="org.apache.catalina.valves.RemoteAddrValve"
# allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1|\d+\.\d+\.\d+\.\d+" />
  1. 上传出现异常”I/O exception (java.net.SocketException) caught when processing request: Connection reset by peer: socket write error”
  • 服务器上已经存在了xxx.war,必须先删除,否则会报出
  • 防火墙未关闭或未把远程服务器上的端口放开,放开即可,保证本地机浏览器可以打开远程tomcat
  1. 正式服务器不太建议用这种方式,不太安全,一旦密码泄露,后果可想而知

参考博客

https://blog.csdn.net/qq_30264689/article/details/79471621

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容