《从零开始搭建游戏服务器》项目发布到Linux环境

前言:

之前我们提及了如何使用Maven来创建、管理和打包项目,也简单过了一遍Linux中搭建Java开发环境的步骤,现在我们就开始将我们之前开发的项目demo发布到Linux环境下,并让它正常运行起来。

发布思路:

  • 使用Maven将项目打包为.jar
  • 将项目的.jar和项目所有依赖的jar包都复制到Linux下
  • 创建项目启动脚本来启动项目

准备工作:

  • 查询Linux系统机器的Ip地址:方法很简单,在Linux中打开终端输入ifconfig即可查到Ip地址为192.168.35.130

  • 修改Eclipse中客户端和服务器的连接Ip地址改为此地址:
    private static final String IP = "192.168.35.130";
    private static final int PORT = 8088;

Maven打包项目:

在之前的篇幅中我们已经讲解了Maven的相关常识,这里我们一开始没有使用Maven来创建项目,而是使用Eclipse创建了一个Java Application,这里要使用Maven来管理已创建好的Eclipse工程,步骤如下:

  • Eclipse安装Maven插件:

    在Eclipse中点击Help->Eclipse Marketplace,搜索maven在搜索结果列表中找到Maven Integration for Eclipse插件,假如未安装则点击Install进行安装,已安装但非最新版本可以点击Update,已经安装且为最新版本显示Installed:

  • 普通Eclipse项目Maven适配:

    在Eclipse选中项目根目录,右键Configure->Convert To Maven Project:

    在弹窗中输入Group Id(包名,一般是域名反写)、Artifact Id(工程名称)和Version:

    操作完成之后,在项目下面多出了一个pom.xml文件

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
      <modelVersion>4.0.0</modelVersion>
      <groupId>com.tw.login</groupId>
      <artifactId>TWLogin</artifactId>
      <version>0.0.1-SNAPSHOT</version>
      <build>
        <sourceDirectory>src</sourceDirectory>
        <resources>
          <resource>
            <directory>src</directory>
            <excludes>
              <exclude>**/*.java</exclude>
            </excludes>
          </resource>
        </resources>
        <plugins>
          <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.5.1</version>
            <configuration>
              <source>1.8</source>
              <target>1.8</target>
            </configuration>
          </plugin>
        </plugins>
      </build>
    </project>
  • 项目依赖于其他项目:

    可以打开pom.xmlDependencies页签,通过Add进行添加,添加时输入可以通过输入GroupId和ArtifactId进行搜索:

    例如:我们项目中使用了Netty来搭建网络层开发,所以要将其jar包添加到Dependencies中:

    需要将本地/lib文件夹中的.jar一一添加到Dependencies:

    或者是选中pom.xml右键Maven->Add Dependency也可以进入到添加依赖的窗口。也可以在pom.xml中直接添加<dependencies>...</dependencies>,添加一下内容:

    <dependencies>
    <dependency>
        <groupId>commons-logging</groupId>
        <artifactId>commons-logging</artifactId>
        <version>1.2</version>
    </dependency>
    <dependency>
        <groupId>io.netty</groupId>
        <artifactId>netty-all</artifactId>
        <version>4.0.42.Final</version>
    </dependency>
    <dependency>
        <groupId>com.google.protobuf</groupId>
        <artifactId>protobuf-java</artifactId>
        <version>2.5.0</version>
    </dependency>
    <dependency>
        <groupId>redis.clients</groupId>
        <artifactId>jedis</artifactId>
        <version>2.1.0</version>
    </dependency>
    <dependency>
        <groupId>commons-pool</groupId>
        <artifactId>commons-pool</artifactId>
        <version>1.6</version>
    </dependency>
    </dependencies>
  • 项目打包:

    通常通过命令行窗口和Maven指令来进行打包,但这是我们可以直接在Eclipse中进行打包简化打包流程,Jave Application工程会被打包成.jar包,而Jave Web工程则打包成.war包,这里我们要将Java Application打包成一个可执行程序的jar包,需要提前考虑三个步骤:

    • 配置文件需要打进jar包;
    • 需要制定程序的main入口类;
    • 所有依赖的第三方库也要打进jar包。

    满足以上三个条件的话,我们就能使用java -jar xxx.jar来执行我们的程序了,为了满足这个目的,我们通常需要借助一些辅助于Maven的打包插件,常见的有maven-assembly-pluginmaven-shade-plugin,但是使用maven-assembly-plugin的话会把所有需要打到包里的文件全部打成一个.jar包,而且假如第三方配置文件于本地配置文件存在重名时,会出现直接覆盖的bug,所以这里我们还是选用maven-shade-plugin插件来打包。

    • 修改pom.xml,首先引入maven-shade-plugin,需要在<build><plugins><plugin>...</plugin></plugins></build>中添加:

      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-shade-plugin</artifactId>
      <version>1.4</version>

    在同等级位置添加入口类和并制定打包插件(其中<goal>shade</goal>就指定了打包插件使用maven-shade-plugin):

    <executions>
    <execution>
        <phase>package</phase>
        <goals>
            <goal>shade</goal>
        </goals>
        <configuration>
            <transformers>
                <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                    <!-- 定义入口类 -->
                    <mainClass>com.tw.login.LoginSocketServer</mainClass>
                </transformer>
            </transformers>
        </configuration>
    </execution>
    </executions>
    • 方法一:在Eclipse中选中项目的pom.xml文件,右键Run As->Maven Clean,假如清理成功,target文件夹中的编译生成文件都被清除掉:

      [INFO] Scanning for projects...
      [INFO]
      [INFO] ------------------------------------------------------------------------
      [INFO] Building TWLogin 0.0.1-SNAPSHOT
      [INFO] ------------------------------------------------------------------------
      [INFO]
      [INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ TWLogin ---
      [INFO] Deleting E:\java web\workplace\TWLogin\target
      [INFO] ------------------------------------------------------------------------
      [INFO] BUILD SUCCESS
      [INFO] ------------------------------------------------------------------------
      [INFO] Total time: 0.293 s
      [INFO] Finished at: 2017-03-24T13:09:58+08:00
      [INFO] Final Memory: 7M/153M
      [INFO] ------------------------------------------------------------------------

    然后执行打包指令:选中项目的pom.xml文件,右键Run As->Maven Build

    假如报错:

    [ERROR] No goals have been specified for this build. You must specify a valid lifecycle phase or a goal in the format <plugin-prefix>:<goal> or <plugin-group-id>:<plugin-artifact-id>[:<plugin-version>]:<goal>. Available lifecycle phases are: validate, initialize, generate-sources, process-sources, generate-resources, process-resources, compile, process-classes, generate-test-sources, process-test-sources, generate-test-resources, process-test-resources, test-compile, process-test-classes, test, prepare-package, package, pre-integration-test, integration-test, post-integration-test, verify, install, deploy, pre-clean, clean, post-clean, pre-site, site, post-site, site-deploy. -> [Help 1]
    [ERROR]
    [ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
    [ERROR] Re-run Maven using the -X switch to enable full debug logging.
    [ERROR]
    [ERROR] For more information about the errors and possible solutions, please read the following articles:
    [ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/NoGoalSpecifiedException

    pom.xml文件<build>标签里面加上<defaultGoal>compile</defaultGoal>即可,假如又出现如下错误:

    [ERROR] COMPILATION ERROR :
    [INFO] -------------------------------------------------------------
    [ERROR] No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK?
    [INFO] 1 error
    [INFO] -------------------------------------------------------------
    [INFO] ------------------------------------------------------------------------
    [INFO] BUILD FAILURE
    [INFO] ------------------------------------------------------------------------
    [INFO] Total time: 0.594 s
    [INFO] Finished at: 2017-03-24T14:06:13+08:00
    [INFO] Final Memory: 10M/153M
    [INFO] ------------------------------------------------------------------------
    [ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project TWLogin: Compilation failure
    [ERROR] No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK?
    [ERROR] -> [Help 1]

    解决方案是:在Eclipse选中项目,右键->Properties->Project Facets,勾选Apache Tomcat,因为Eclipse中Maven打包依赖Tomcat服务:

    正确的输出结果如下:

    [INFO] Scanning for projects...
    [INFO]
    [INFO] ------------------------------------------------------------------------
    [INFO] Building TWLogin 0.0.1-SNAPSHOT
    [INFO] ------------------------------------------------------------------------
    [INFO]
    [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ TWLogin ---
    [WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
    [INFO] Copying 1 resource
    [INFO]
    [INFO] --- maven-compiler-plugin:3.5.1:compile (default-compile) @ TWLogin ---
    [INFO] Nothing to compile - all classes are up to date
    [INFO] ------------------------------------------------------------------------
    [INFO] BUILD SUCCESS
    [INFO] ------------------------------------------------------------------------
    [INFO] Total time: 1.801 s
    [INFO] Finished at: 2017-03-22T13:07:50+08:00
    [INFO] Final Memory: 10M/217M
    [INFO] ------------------------------------------------------------------------

    假如出现编码的警告,要解决这个警告,只需在pom.xml<project>标签内添加以下内容指定编码方式:

    <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    • 方法二:可以打开命令行窗口,定位到当前项目的目录下,使用mvn clean package进行打包,相关依赖信息和打包方式在pom.xml中配置:

  • 打包成功后,在项目的target目录下会生成对应Version版本的.jar包,例如这里我的输出包为:TWLogin-0.0.1-SNAPSHOT.jar,这就是我们要用来放到Linux服务器中运行的源码包:

Linux下安装Maven:

  • Maven官网下载最新的Maven安装包,这里我下载的是:apache-maven-3.3.9-bin.tar.gz
  • 通过终端解压安装包到/usr/local目录下:
    sudo tar -xzf /mnt/Windows/apache-maven-3.3.9-bin.tar.gz -C /usr/local/jvm
  • 修改用户变量配置文件~/.bashrc和系统环境配置文件/etc/profile,都是在文件最后插入Maven的配置信息:
    
    #Set maven environment
    
    MAVEN_HOME=/usr/local/jvm/apache-maven-3.3.9
    export MAVEN_HOME
    export PATH=${PATH}:${MAVEN_HOME}/bin
  • 使用source .bashrcsource /etc/profile使修改配置文件内容立即生效,使用mvn -v测试安装是否成功,如果成功,则显示当前安装的Maven的版本信息:
    linsh@ubuntu:~$ mvn -v
    Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-10T08:41:47-08:00)
    Maven home: /usr/local/jvm/apache-maven-3.3.9
    Java version: 1.8.0_121, vendor: Oracle Corporation
    Java home: /usr/local/jvm/jdk1.8.0_121/jre
    Default locale: zh_CN, platform encoding: UTF-8
    OS name: "linux", version: "4.2.0-27-generic", arch: "amd64", family: "unix"
    linsh@ubuntu:~$ 

在Linux中运行项目:

  • 我们将之前打包得到的TWLogin-0.0.1-SNAPSHOT.jar复制到Linux中,新建一个目录作为项目总目录application,然后再为每个项目创建一个子目录,这里我们以我们的项目名称来创建子目录,将项目文件复制到此目录下:

    sudo mkdir /application
    sudo mkdir /application/TWLogin
    sudo cp -r /mnt/Windows/TWLogin /application/TWLogin
  • 测试运行项目:

    直接进到项目目录/application/TWLogin中,使用运行指令java -jar TWLogin-0.0.1-SNAPSHOT.jar执行程序,然后再在Eclipse中启动客户端代码,尝试连接服务器并发送数据,假如运行正常,情况如下:

    [email protected]:/application/TWLogin$ java -jar TWLogin-0.0.1-SNAPSHOT.jar
    三月 21, 2017 10:07:42 上午 com.tw.login.LoginSocketServer main
    信息: 开始启动Socket服务器...
    三月 21, 2017 10:07:42 上午 com.tw.login.LoginSocketServer run
    信息: Socket服务器已启动完成
    三月 21, 2017 10:07:54 上午 com.tw.login.LoginSocketServer channelRead
    信息: 数据内容:UserName=linshuhe,Password=123456

    注:

    假如你也跟我一样出现这个错误:TWLogin-0.0.1-SNAPSHOT.jar中没有主清单属性,那么恭喜你跟我一样犯了个低级错误,忘了在使用maven打包项目之前,在pom.xml中添加项目的入口函数main的相关路径信息,解决方案就是在pom.xml的中添加以下内容:

    <transformers>
    <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
        <mainClass>com.tw.login.server.LoginSocketServer</mainClass>
    </transformer>
    </transformers>

    此处com.tw.login.server.LoginSocketServer脚本中的main函数即使本应用入口函数。

  • 创建启动脚本:

    我们为了避免每次运行项目都敲一遍启动项目所需的指令,通常会将指令封装成一个启动脚本,在Windows系统下我们通常使用.bat的批处理脚本来进行批处理,把很多命令放在此文件中,当然也能作为一些应用程序的启动脚本,而在Linux系统中,使用shell脚本来实现同等的效果,Shell脚本是Linux的一种文本文件,这里我们就来编辑一下启动脚本start.sh的内容:

    
    #!bin/sh
    
    echo 如果不能正常运行,请安装JDK 1.8版
    java -jar TWLogin-0.0.1-SNAPSHOT.jar
  • 执行启动脚本:

    启动脚本通常放到与可执行.jar文件同级的目录下,在终端中定位到脚本所在的目录,执行:

    sh start.sh
时间: 2024-10-13 23:46:10

《从零开始搭建游戏服务器》项目发布到Linux环境的相关文章

在阿里云服务器(ECS)上从零开始搭建nginx服务器

本文介绍了如何在阿里云服务器上从零开始搭建nginx服务器.阿里云服务器(ECS)相信大家都不陌生,感兴趣的同学可以到http://www.aliyun.com/product/ecs去购买,或到体验馆去体验(半个月有效期).至于如何注册.管理ECS这里就不详细介绍了.因为官方文档已经写的很清楚了.如果还不清楚,打咨询电话询问. 现在假设你已经拥有了阿里云服务器,ip是139.128.33.11(假的,读者需要换成自己的ip地址).并且没有选择任何安装包.现在ECS是完全空的,除了必须的Linu

vue-用Vue-cli从零开始搭建一个Vue项目

Vue是近两年来比较火的一个前端框架(渐进式框架吧). Vue两大核心思想:组件化和数据驱动.组件化就是将一个整体合理拆分为一个一个小块(组件),组件可重复使用:数据驱动是前端的未来发展方向,释放了对DOM的操作,让DOM随着数据的变化自然而然的变化(尤神原话),不必过多的关注DOM,只需要将数据组织好即可.本文用Vue-cli从零开始搭建一个Vue项目. 准备工作 1.下载安装Node.js 下载地址:https://nodejs.org/en/download/ ,选择合适自己的版本下载即可

将windows上面的项目拷贝到Linux环境下报错不能够找到对应的表com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table &#39;puyang.ServiceType&#39; doesn&#39;t exist

将一模一样的项目从win迁移到到linux上报错: 一开始还是以为是linux不能识别hql语句,查找资料发现是因为Liunx服务器上mysql是区分大小写的,而本地是不区分的如:代码是这样写的 @Entity@Table(name = "users") 数据库建的表名称是Users,那么就会出现以上异常. 将windows上面的项目拷贝到Linux环境下报错不能够找到对应的表com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorExcepti

搭建web服务器,发布站点

HT公司要搭建一台Web服务器,要求如下: 一.基本设置 (1)将主机名更改为WEBServer (2)该计算机的内网IP地址为192.168.1.1/24 (3)在本机上搭建DNS服务器,并为本机网站解析名称:www.HT.com,oa.HT.com,web.HT.com,support.HT.com,mail.HT.com,www2.HT.com 二.WWW服务器设置 1.公司OA站点的配置 利用默认端口配置一个公司内网oa主站,路径为D:\OA文件夹,站点首页名称为default.htm.

手把手教你从零开始搭建SpringBoot后端项目框架

原料 新鲜的IntelliJ IDEA.一双手.以及电脑一台. 搭建框架 新建项目 打开IDE,点击File -> New Project.在左侧的列表中的选择Maven项目,点击Next. 填写GroupId和ArtifactId 什么是GroupId和ArtifactId?大家可以参考一下google出来的定义,可以参考一下. GroupID是项目组织唯一的标识符,实际对应JAVA的包的结构,是main目录里java的目录结构. ArtifactID就是项目的唯一的标识符,实际对应项目的名称

项目发布到正式环境不报错 但是业务执行不成功--自己挖坑坑自己

在一个类中加了一个set方法,在service里面调用了,但是我只把service上传了,没把那个更新的类同时上传,导致投保不成功(保险产品),最后用笨办法 一行一行的System,还是没找到错误所在,最后在经理的提醒下,只有set.get方法处有可能报错,然后我仔细看了下,才想起自己老早之前改过代码,最担心就是发布到生产环境,不报错但是投保不成功,通过这件事情  发现自己干活太乱,每个自己的节奏,在以后的日子里总结自己的节奏.

java项目发布到linux服务器后验证码乱码问题

图片中验证码为乱码原因是Linux系统和windows系统默认语言字体不一样,Linux中没有微软雅黑和Times New Roman字体. 解决办法:win+e -->c盘-->windows-->fonts打开页面 把微软雅黑和Times New Roman上传到linux服务器中的/usr/java/jdk1.8.0_152/jre/lib/fonts中,然后重新启动Tomcat即可,亲测有效. 原文地址:https://www.cnblogs.com/yz820/p/860749

从零开始搭建Gitlab服务器

Gitlab简介 最近感觉就是在不断的搭建/迁移版本服务器,而现在市面上关于版本服务器搭建的指南都流于表面,真正深入骨骼的少之又少,往往以偏概全很多关键点并未提及.而版本服务器的搭建往往是一个初创型或中小型公司迫切需要解决的问题. 目前市用户量和口碑较好的Git服务提供商,屈指可数.国外的话 GitHub,BitBucket 都是不错的选择,但国际形势变幻莫测,需要随时备好*.国内的话Coding用户体验就做的很不错,很切合码农们的审美, 开源中国的码云**也有对应的代码托管服务,不过自从他们家

Linux 下搭建jsp服务器(配置jsp开发环境)

Linux 做为服务器的高效一直时为人所熟知的了,在linux 上搭建各种各样的服务器和开发环境也时学计算机的人常做的.以下时最近在linux配置jsp服务器的全过程,包含一些基本步骤和排错过程: 1.安装java jdk 首先从官网下载jdk解压包,下载最新版的tar.gz 格式,下载完后进行解压缩: Tar -zxvf *.tar.gz 将解压到的文件夹复制/usr/local 下(此处可以不做,只要记住jdk的路径即可,不过为了统一管理,建议还是将这一类的文件夹存放在一个固定的位置) 配置