《从零開始搭建游戏server》项目公布到Linux环境
前言:
之前我们提及了怎样使用Maven来创建、管理和打包项目,也简单过了一遍Linux中搭建Java开发环境的步骤,如今我们就開始将我们之前开发的项目demo公布到Linux环境下。并让它正常执行起来。
公布思路:
- 使用Maven将项目打包为.jar
- 将项目的.jar和项目全部依赖的jar包都拷贝到Linux下
- 创建项目启动脚本来启动项目
准备工作:
- 查询Linux系统机器的Ip地址:方法非常easy,在Linux中打开终端输入
ifconfig
就可以查到Ip地址为192.168.35.130
:
- 改动Eclipse中client和server的连接Ip地址改为此地址:
private static final String IP = "192.168.35.130";
private static final int PORT = 8088;
Maven打包项目:
在之前的篇幅中我们已经解说了Maven的相关常识,这里我们一開始没有使用Maven来创建项目,而是使用Eclipse创建了一个Java Application,这里要使用Maven来管理已创建好的Eclipse工程。过程例如以下:
安装EclipseMaven插件:
在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.xml
的Dependencies
页签,通过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-plugin
和maven-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
,这就是我们要用来放到Linuxserver中执行的源代码包:
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 .bashrc
和source /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中启动client代码。尝试连接server并发送数据。假如执行正常,情况例如以下:linsh@ubuntu:/application/TWLogin$ java -jar TWLogin-0.0.1-SNAPSHOT.jar
三月 21, 2017 10:07:42 上午 com.tw.login.LoginSocketServer main
信息: 開始启动Socketserver...
三月 21, 2017 10:07:42 上午 com.tw.login.LoginSocketServer run
信息: Socketserver已启动完毕
三月 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
《从零開始搭建游戏server》项目公布到Linux环境的更多相关文章
- # 从零開始搭建Hadoop2.7.1的分布式集群
Hadoop 2.7.1 (2015-7-6更新),Hadoop的环境配置不是特别的复杂,可是确实有非常多细节须要注意.不然会造成很多配置错误的情况.尽量保证一次配置正确防止重复改动. 网上教程有非常 ...
- 从零開始写游戏引擎(一) - project创建以及文件夹设置还有版本号控制
一句话提要 好的開始等于成功了一半. 创建文件夹结构 project文件夹下最好分为以下几个文件夹 Docs - 开发文档,设计文档 Assets - 角色,动作,模型和音效等 Source - 代码 ...
- [Golang] 从零開始写Socket Server(3): 对长、短连接的处理策略(模拟心跳)
通过前两章,我们成功是写出了一套凑合能用的Server和Client,并在二者之间实现了通过协议交流.这么一来,一个简易的socket通讯框架已经初具雏形了,那么我们接下来做的.就是想办法让这个框架更 ...
- [Golang] 从零開始写Socket Server(4):将执行參数放入配置文件(XML/YAML)
为了将我们写好的Server公布到server上.就要将我们的代码进行build打包.这样假设以后想要改动一些代码的话.须要又一次给代码进行编译打包并上传到server上. 显然,这么做过于繁 ...
- [Golang] 从零開始写Socket Server(2): 自己定义通讯协议
在上一章我们做出来一个最基础的demo后,已经能够初步实现Server和Client之间的信息交流了~ 这一章我会介绍一下怎么在Server和Client之间实现一个简单的通讯协议.从而增强整个信息交 ...
- 从零開始的Android新项目7 - Data Binding入门篇
Data Binding自从去年的Google I/O公布到至今,也有近一年的时间了.这一年来,从Beta到如今比較完好的版本号.从Android Studio 1.3到如今2.1.2的支持,能够说D ...
- 站点搭建从零開始(四) server的配置
原文发表在我的个人站点,欢迎大家訪问~转载请保留本段,或注明原文:http://www.hainter.com/website-primer-4 域名解析设置好了,通常我们就能够訪问我们的网站了,上篇 ...
- 从零開始学习OpenCL开发(一)架构
多谢大家关注 转载本文请注明:http://blog.csdn.net/leonwei/article/details/8880012 本文将作为我<从零開始做OpenCL开发>系列文章的 ...
- 关东升的《从零開始学Swift》即将出版
大家好: 苹果2015WWDC大会公布了Swift2.0,它较之前的版本号Swift1.x有非常大的变化.所以我即将出版<从零開始学Swift><从零開始学Swift>将在&l ...
随机推荐
- VIM打开shell脚本中文乱码解决
1. 查找 .vimrc文件 通常有2个地方保存这个文件的: (1) 在/etc/文件夹下面,是所有用户的vim配置 (2)每个用户的开始登录的文件夹下面,有些不一定有,比如hadoop用户,则在/h ...
- datagrid columns
columns: [[ { field: 'Source_Id', title: 'Source_Id', hidden: true }, //{ field: 'Current_Value', hi ...
- Javascript代码执行过程-《悟透Javascript》笔记
本文摘录自李战老师<悟透Javascript>一书的部分章节,为适应博客发表作了一点点修改. 1) 预编译分析. JavaScript执行引擎将所有定义式函数直接创建为作用域上的函数变量, ...
- [Cxf] cxf 相关知识整理
① 请求方式为GET @GET @Path(value = "/userAddressManage") @Produces( { MediaType.APPLICATION_JSO ...
- selenium运行火狐报错FirefoxDriver : Unable to connect to host 127.0.0.1 on port 7055
摘要: 这是个常见的启动firefoxdriver的问题,具体的错误日志如下,其实原因很简单,就是你的Selenium版本和firefox 不兼容了. Firefox 版本太高了, 请及时查看你安装的 ...
- Cloudera公司主要提供Apache Hadoop开发工程师认证
Cloudera Cloudera公司主要提供Apache Hadoop开发工程师认证(Cloudera CertifiedDeveloper for Apache Hadoop ,CCDH)和Apa ...
- 具有全球唯一性,相对于internet,IP为逻辑地址
网络与分布式集群系统的区别:每个节点都是一台计算机,而不是各种计算机内部的功能设备. Ip:具有全球唯一性,相对于internet,IP为逻辑地址. 端口(port):一台PC中可以有65536个端口 ...
- Javascript特效代码大全(420个)(转)
转载自:Javascript特效代码大全(420个) 收集资料,以便使用+面试+学习 ├ Cookie脚本 ├ 随访问次数变提示 ├ 集成Cookies ├ 使窗口仅弹出一次 ├ 签名提示程序 ├ ...
- CefGlue 学习杂记
1. hg clone代码回来后,还要下载对应的cef dll . 从http://xilium.bitbucket.org/cefglue/ 选择对应的. 然后把dll和resource目录里的内 ...
- windows性能监视器的使用
https://blog.csdn.net/ab7434588/article/details/53023799 一般在客户端通过LoadRunner对服务器进行压力测试,都需要实时监控服务器端的系统 ...