公司的WEB项目是GBK编码的,组里基本上都是用eclipse的,IDEA中碰到的很多问题都要重新去解决。
1. 输出乱码问题
先倒不提代码中输出的中文了,编译、mvn build以及tomcat日志都有乱码。网上搜了一下,比较靠谱的是:
http://www.kafeitu.me/tools/2013/03/26/intellij-deal-chinese-disorderly-code.html
这里提到的解决方案。这个方案基本上能够解决IDEA的乱码问题,除了在调用autoconfig的时候还是会输出乱码,这时还是需要在pom文件中指定一下maven-autoconfig-plugin的编码。默认是没有指定的,这样它会用系统默认的,如果LC_ALL环境变量为空,那就会使用MacRoman,显然这对中文输出是有问题的。修改pom后如下:
<plugin>
<groupId>com.alibaba.citrus.tool</groupId>
<artifactId>maven-autoconfig-plugin</artifactId>
<version>1.0.9</version>
<configuration>
<exploding>true</exploding>
<explodedDirectory>
${warExplodedDirectory}
</explodedDirectory>
<charset>GBK</charset>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>autoconfig</goal>
</goals>
</execution>
</executions>
</plugin>
这样就能完美地解决build以及tomcat的输出了。
不过在iTerm2中手动调mvn build,输出还是有乱码。无解。。。
2. IDEA中使用maven的问题
这个不知道是不是我IDEA没配置好。maven默认是已经集成在IDEA中的,但是在打包项目时,却报找不到maven,并提示设置M2_HOME环境变量,错误信息如下:
IDEA [FATAL_ERROR] Cannot start Maven: No valid Maven installation found
这个问题在stackoverflow上也有记录:http://stackoverflow.com/questions/8221587/intellij-cant-find-my-m2-home-why-is-that
我先在~/.zshrc中设置export M2_HOME=/usr/share/maven,但是没有用。后来上网查了一下,说mac的shell环境变量,未必能够被GUI应用程序读到。于是按照
http://www.dowdandassociates.com/content/howto-set-an-environment-variable-in-mac-os-x-slash-etc-slash-launchd-dot-conf/
这篇文章讲的,把环境变量加到了/etc/launched.conf中(需要重启)。这样就能使用maven build了。
3. autoconfig的配置值注入问题
关于autoconfig,见这里:http://openwebx.org/docs/autoconfig.html
项目使用了maven filtering来配置autoconfig,配置如下:
<build>
<finalName>my_project_name</finalName>
<filters>
<filter>${user.home}/antx.properties</filter>
</filters>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
......
结果是,项目中一部分xml文件的placeholder值被替换了,另一部分却没有。
刚开始以为是maven版本导致的问题,因为我本机用的是maven 3.0,而公司服务器上的是maven 2.1。网上搜了一下,3.0倒确实有一个因为注释中出现了“@"符号而导致这个文件的值没法被替换的情况。不过看了下项目中,并没有这个特殊符号,排除了这个问题。
后来师兄在看日志输出的时候发现一行:
[WARNING] Using platform encoding (MacRoman actually) to copy filtered resources, i.e. build is platform
dependent!
看起来有可能是编码的问题,这个问题,stackoverflow中给的方案是,在pom中将project.build.sourceEncoding设为确定的编码。
我用的是另外一种方案:添加maven-resources-plugin,并指定编码,具体如下:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.6</version>
<configuration>
<encoding>GBK</encoding>
</configuration>
</plugin>
这个问题之所以没有在服务器上重现,是因为公司的web服务器的系统编码都已经设置成了GB18030,直接把这个问题给规避掉了,汗。。。
4. 一些杂项
问题2讲到了用maven,这个项目中使用maven,其实是在Run --> Edit Configurations里的,也就是说配置web项目的启动选项的时候指定的。因为pom文件里配置了一些特殊的goal如使用autoconfig打包配置等。
因为应用是使用tomcat的,所以在Edit Configurations,首先要添加一个tomcat6的server。具体过程见这篇文章:
http://my.oschina.net/tsl0922/blog/94621
这时最下面有一个Before launch的选项,默认是只选make的,因为我们项目是使用maven的,所以还需要选中"Run Maven Goal”,然后指定一下具体的web项目以及maven的lifecycle(一般至少是package,可以选install)。
这里的VM parameters,就涉及到了问题1的编码问题,需要添加-Dfile.encoding=UTF-8参数。如果应用需要较多内存,可能还需要调整内存。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.8.1</version>
<configuration>
<skipTests>${skipTests}</skipTests>
</configuration>
</plugin>
其中skipTests是在properties段中配置的:<properties>
<skipTests>true</skipTests>
</properties>
这样就变成默认是不运行UT的了。总体经验就是,mac用户真心不容易啊,各种小白鼠各种踩坑。。。