最近特别想研究页游客户端,于是找了套有前有后有资源的页游源码。唯一遗憾的是这套源码服务器是JAVA写的,不过也正好有机会看一看JAVA写的服务器。
服务器代码在win下导入eclipse, 编译打包运行都没问题。可传到了linux上却跑不起来,换了很多JDK版本都没用,我又只有linux的vps,没有windows的,总不能每次跑客户端都在本地跑一个服务器吧。最后没办法,只能在linux上安装ANT,准备用ANT编译打包一个可以运行的JAR包。
java源文件编译后会生成可直接运行的.class文件,运行时jre会从classpath中以命名空间的层级为路径加载所依赖的类。一般都会将这堆.class打包成一个jar文件,并用一个配置文件标识主入口和外部依赖的jar。
ant就是一个可以根据配置自动完成这些工作的编译部署工具。基本上和make读取makefile自动编译一样,ant会读取build.xml并执行一系列动作。经过一天的摸索,最后终于在linux上编译打包运行了这份代码。经此一役,也基本上弄清楚了java的编译过程和ANT的用法。 最后的build.xml如下:
<?xml version="1.0" encoding="UTF-8"?>
<project name="warriors" default="compile" basedir="./">
<path id="classpath">
<fileset dir="." includes="lib/*.jar"/>
</path>
<target name="clean">
<delete dir="build"/>
</target>
<target name="compile" depends="clean">
<mkdir dir="build/classes"/>
<javac srcdir="src" destdir="build/classes" encoding="UTF-8" listfiles="true" includeAntRuntime="false">
<classpath refid="classpath"/>
<compilerarg value="-Xlint:unchecked"/>
</javac>
</target>
<target name="run" depends="compile">
<java classname="com.yayo.warriors.YayoDaemon">
<classpath refid="classpath"/>
<classpath>
<pathelement path="build/classes"/>
</classpath>
</java>
</target>
<target name="jar" depends="compile">
<pathconvert targetos="unix" property="string.classpath" pathsep=" " refid="classpath">
<map from="${basedir}/" to="" />
</pathconvert>
<jar destfile="./warriors.jar" basedir="build/classes">
<manifest>
<attribute name="Main-Class" value="com.yayo.warriors.YayoDaemon"/>
<attribute name="Class-Path" value="resources/ ${string.classpath}"/>
</manifest>
</jar>
</target>
</project>
最后和eclipse生成的jar对比,发现除了有的.class不一样其他都一样,也没发现具体是什么差别造成的。也许只有再深入一步才能知晓这个问题的答案了。