分类存档: 开发小知识

bat文件中使用mvn命令

mvn自身也是一个bat脚本。

因此,如果调用需要使用使用call进行调用

call mvn clean
call mvn

游戏业务逻辑拆分,mvn war包引用war包解决方案

游戏服务器端打为了一个war包。

这次做项目时,希望将游戏中的通用模块及通用业务模块拆分至一个公共项目中,然后每个游戏可以分别建立一个项目来引用公共项目,可以只需要写业务逻辑,而不再需要关心其它的方面。

2013.11.06 记:

其实前几天已经解决掉了最后一个遇到的问题:这里还要感谢run jetty插件的作者。

现在开始动手进行项目改造:

  1. 这里核心工程定义为xcore,定义依赖工程文件xcore-dep,提供用来进行编译所需要的类。
  2. 定义另一个工程xcore-game,该工程为实际发布的游戏包。这里放在这里是为了调试xcore工程。以后开发新游戏时,直接复制xcore-game包即可。
  3. 定义第三个工程xcore-moon,测试工程,用来测试更为复杂的功能。(这个等前两个工程完工后再完成).
  4. 先在xcore工程下尝试运行看看能否运行。mvn、jetty:run及jetty:run-war。全部运行通过。
  5. 在xcore中的pom.xml中添加以下代码,用来生成xcore中的包含类的jar包
    			<plugin>
    				<artifactId>maven-war-plugin</artifactId>
    				<version>2.4</version>
    				<configuration>
    					<attachClasses>true</attachClasses>
    				</configuration>
    			</plugin
  6. 在xcore-game工程中修改pom.xml
    			<plugin>
    				<groupId>org.apache.maven.plugins</groupId>
    				<artifactId>maven-war-plugin</artifactId>
    				<version>2.4</version>
    				<configuration>
    					<useCache>false</useCache>
    					<workDirectory>target/overlay-war-folder</workDirectory>
    					<overlays>
    						<overlay>
    						</overlay>
    						<overlay>
    							<groupId>cn.XXXXX</groupId>
    							<artifactId>xcore</artifactId>
    						</overlay>
    					</overlays>
    				</configuration>
    			</plugin>
  7. 运行xcore-game工程,遇到以下错误
    [ERROR] Nested in org.springframework.beans.factory.BeanCreationException: Error
     creating bean with name 'org.mybatis.spring.mapper.MapperScannerConfigurer#0' d
    efined in file [D:\workspace\xcore-game\target\tmp\webapp\WEB-INF\classes\applic
    ationContext-mybatis.xml]: Initialization of bean failed; nested exception is ja
    va.lang.NoSuchFieldError: NULL:
    java.lang.NoSuchFieldError: NULL
            at org.springframework.expression.TypedValue.<clinit>(TypedValue.java:31
    )

    打开生成的war包,发现里面spring-expression引入了两个不同的版本,修改pom.xml将旧版本排除掉。OK,顺利解决问题。

  8. 奇怪,前几天明明ren jetty插件可以正常运行,现在竟然跑不起来了。有空再查吧,先用jetty:run-war凑活。
  9. run jetty插件失效的原因找到了,在原工程里面mvn可以成功编译工程,现在新的工程中,依赖eclipse编译源码,mvn无法成功编译源码,无法编译的原因后续再查。(原因查找到了,原来我是copy过来的pom.xml,里面的包名没有修改导致的)

maven中直接添加jar包

<dependency>
<groupId>cn.kingsoft</groupId>
<artifactId>game-server</artifactId>
<version>1.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/lib/game-server-1.0.jar</systemPath>
</dependency>

maven中添加war包依赖

maven中添加war包依赖

<project>
  ...
  <build>
    <!-- To define the plugin version in your parent POM -->
    <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.appfuse.plugins</groupId>
                    <artifactId>maven-warpath-plugin</artifactId>
                    <version>2.2.2-SNAPSHOT</version>
                </plugin>
            </plugins>
        </pluginManagement>
    <!-- To use the plugin goals in your POM or parent POM -->
    <plugins>
      <plugin>
           <groupId>org.appfuse</groupId>
                <artifactId>maven-warpath-plugin</artifactId>
                <version>2.0.2</version>
                <extensions>true</extensions>
                <executions>
                    <execution>
                        <goals>
                            <goal>add-classes</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
      ...
    </plugins>
  </build>
  ...
</project>

通常会再添加以下配置将war包中的lib包过滤掉:

                        <plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-war-plugin</artifactId>
				<configuration>
					<dependentWarExcludes>WEB-INF/lib/*</dependentWarExcludes>
				</configuration>
			</plugin>

添加war包依赖

       <dependency>
            <groupId>cn.kingsoft</groupId>
            <artifactId>game-web</artifactId>
            <version>1.0</version>
            <type>warpath</type>
        </dependency>

cmd命令中显示utf字符

自从项目中所有文件变为utf8字符集后,cmd中就再也没有看到过正确的中文显示。因为cmd默认使用gbk字符集。

以下操作将cmd改为utf8字符集。

1、打开CMD.exe命令行窗口
2、通过 chcp命令改变代码页,UTF-8的代码页为65001(gbk 936)
chcp 65001
执行该操作后,代码页就被变成UTF-8了。但是,在窗口中仍旧不能正确显示UTF-8字符。
3、修改窗口属性,改变字体
在命令行标题栏上点击右键,选择”属性”->”字体”,将字体修改为True Type字体”Lucida Console”,然后点击确定将属性应用到当前窗口。

获得bat文件所在的目录

cd /d %~dp0

编写bat必备内容。

win7下的创建软连接工具

windows下没有linux下的ln命令,在开发造成不小的麻烦。

幸好在win7下发现了mklink这个命令,可以像ln命令一样创建软连接。

 

D:\workspace\ccb2>mklink
创建符号链接。

MKLINK [[/D] | [/H] | [/J]] Link Target

/D      创建目录符号链接。默认为文件
符号链接。
/H      创建硬链接,而不是符号链接。
/J      创建目录联接。
Link    指定新的符号链接名称。
Target  指定新链接引用的路径
(相对或绝对)。